mongoose에서 중첩된 개체 업데이트 중
중첩된 개체에 대한 많은 질문을 검색했지만 어레이와 관련된 모든 정보를 찾았습니다.
mongoose에서 업데이트 중인 단순 중첩 개체를 찾고 있습니다.
여기서 http://mongoosejs.com/docs/guide.html
there is an example schema :
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
일단 문서가 만들어지면,
나중에 즐겨찾기 번호를 변경하려면 어떻게 해야 합니까?
제가 찾을 수 있는 동일한 문서가 없습니다.
제가 한 일은 이렇습니다.
blog.findById(entityId, function(err, mainDoc){
if(err || !mainDoc) return next(err || 'Document not found');
var subDoc = mainDoc['meta'];
if(subDoc){
subDoc = _.extend(subDoc, { favs : 56 }); //_ lib already available
console.log(mainDoc.get('meta')); //Prints the updated result with favs = 56 OK
mainDoc.save(function(err, doc){
console.log(doc.get('meta')); // prints the updated results with favs = 56 OK
});
} else next('Not found');
});
모든 것이 파일로 작동하고 모든 콘솔이 원하는 결과를 제공합니다.
그러나 mongoose 콘솔로 전환하여 문서를 조회해도 업데이트된 결과가 나타나지 않습니다.
저는 동일한 목표를 달성하기 위한 다른 방법이 있을 수 있다는 것을 알고 있지만, 저는 단지 이 특정 코드에서 제가 잘못하고 있는 것을 찾고 있을 뿐입니다.
문서를 저장한 후 콘솔이 데이터베이스에서 일치하지 않는 데이터를 제공하는 이유는 무엇입니까?
mongoose 디버그 옵션을 활성화했을 때 쿼리에 업데이트할 데이터가 없습니다.빈 $set로 쿼리가 실행됩니다.$set: {}
만약 당신이 단지 값을 변경하고 싶다면.favs간단한 쿼리를 사용할 수 있습니다.
blog.findByIdAndUpdate(entityId, {$set: {'meta.favs': 56}}, function(err, doc) {
console.log(doc);
});
제가 늦지 않고 누군가를 도울 수 있기를 바랍니다.이 기능은 중첩된 심층 객체에서도 작동합니다.제한 없음.
const updateNestedObjectParser = (nestedUpdateObject) => {
const final = {
}
Object.keys(nestedUpdateObject).forEach(k => {
if (typeof nestedUpdateObject[k] === 'object' && !Array.isArray(nestedUpdateObject[k])) {
const res = updateNestedObjectParser(nestedUpdateObject[k])
Object.keys(res).forEach(a => {
final[`${k}.${a}`] = res[a]
})
}
else
final[k] = nestedUpdateObject[k]
})
return final
}
console.log(updateNestedObjectParser({
a: {
b: {
c: 99
},
d: {
i: {
l: 22
}
}
},
o: {
a: 22,
l: {
i: "ad"
}
}
}))
문제는 일단 mongoose의 데이터를 고객에게 보내는 것 외에는 가지고 있는 것으로 아무것도 할 수 없다는 것입니다.
그러나 정보를 업데이트하고 원하는 대로 사용할 수 있도록 만드는 희박한 방법이 있습니다.
이는 다음과 같습니다.
blog.findById(entityId).lean().exec(function (err, mainDoc) {
if (err || !mainDoc) {
return next(err || 'Document not found');
}
var subDoc = mainDoc.meta;
if(subDoc){
subDoc.favs = 56;
blog.update({_id: entityId}, mainDoc, function(err, doc){
console.log(doc.get('meta'));
});
} else {
next('Not found');
}
});
언급URL : https://stackoverflow.com/questions/23832921/updating-nested-object-in-mongoose
'programing' 카테고리의 다른 글
| 파이어베이스 업데이트 대 세트 (0) | 2023.07.11 |
|---|---|
| R에서 작업하는 동안 모든 패키지 분리 (0) | 2023.07.11 |
| HTML 페이지에서 엑셀 시트를 표시하는 방법 (0) | 2023.07.11 |
| PHP 7 MongoDB 클라이언트/드라이버를 설치하시겠습니까? (0) | 2023.07.11 |
| msql을 사용하여 업데이트 및 주문하는 방법 (0) | 2023.07.06 |