Node.js Mongoose:更新在嵌套数组对象中不起作用
我有一个包含对象数组的文档,一个对象包含多个对象,我想用Node.js Mongoose:更新在嵌套数组对象中不起作用,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个包含对象数组的文档,一个对象包含多个对象,我想用$set更新内部对象,但没有得到任何运气。 有谁能给我一些提示,让我解决这个问题吗 这是我的目标: { "_id": ObjectId("56fbfafdf86fa6161911d104"), "site": "xyz", "adsPerCategory": NumberInt(2), "sampledAt": ISODate("2016-03-30T16:12:45.138+0000"), "items": [
$set
更新内部对象,但没有得到任何运气。
有谁能给我一些提示,让我解决这个问题吗
这是我的目标:
{
"_id": ObjectId("56fbfafdf86fa6161911d104"),
"site": "xyz",
"adsPerCategory": NumberInt(2),
"sampledAt": ISODate("2016-03-30T16:12:45.138+0000"),
"items": [
{
"id": "4563873",
"content": {
"title": "WATER DISTILLERS",
"body": "Perfect to save money.",
}
},
{
"id": "4563s23232873",
"content": {
"title": "Cola water",
"body": "Perfect for body.",
}
}
]
}
我想更新正文
现在,我已经给出了单个对象
,但它可以是多个
这是我试过的
models.Sample.update(
{
_id: samples._id
},
'$set': {
'items.0.content.body': body.description
},
function(err, numAffected) {
console.log(err);
console.log('Affected....', numAffected);
}
);
如果我将0
设置为0,它工作得很好,但我希望使其具有动态性
像“items.index.content.body”:body.description
谢谢。我想你可以这样做
models.Sample.find({ _id: ObjectId(samples._id) })
.forEach(function (doc) {
doc.items.forEach(function (element, index, array) {
items[index].content.body = body.description;
});
models.Sample.save(doc);
});
你的意思是,你想用相同的正文内容更新所有的项目吗?不,项目有多个对象,每个对象都有不同的正文内容,因此我使用了
foreach
来迭代和更新所有具有不同内容的正文。我刚刚更新了正文值。我已经尝试过了,但没有成功,通过此操作,除了数组项之外,所有内容都将更新。请尝试设置doc.markModified('doc.items')
,看看是否有帮助?只需将其放在models.Sample.save(doc)之前代码>