[
{
_id: "...",
title: "some title",
tasks: [
{
id: "...",
field1: "abc",
field2: "def"
},
...
]
},
...
]
我想针对给定任务修改 field1 和 field2。我看到很多关于如何更新单个字段的示例,但没有看到如何更新多个字段。
我已尝试以下操作,但它只是用我设置的字段替换整个任务对象。
let changes = { field1: "123", field2: "456" };
db.collection("lists")
.updateOne(
{
"_id": new ObjectId(req.params.listId),
"tasks.id": req.params.id
},
{ $set: { "tasks.$": changes } }
);
感谢任何帮助。谢谢。
工作解决方案
let changes = { field1: "123", field2: "456" };
Object.keys(changes).forEach(key => {
changes[`tasks.$.${key}`] = changes[key];
delete changes[key];
});
db.collection("lists")
.updateOne(
{
"_id": new ObjectId(req.params.listId),
"tasks.id": req.params.id
},
{ $set: changes }
);
最佳答案
您必须遵循类似于下面的查询来更新数组内的嵌套文档。您必须为 field1
和 field2
指定单独的名称。这里是 document链接
db.collection.updateOne(
{"_id": new ObjectId(req.params.listId),"tasks.id": req.params.id },
{ $set: { "tasks.$.field1":"xyz","tasks.$.field2":"mno" } } )
关于node.js - mongodb:如何更新单个文档的嵌套数组项中的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61556838/