Mongodb 如何使用多个值更新数组中的多个项
我有以下文档架构:Mongodb 如何使用多个值更新数组中的多个项,mongodb,Mongodb,我有以下文档架构: let文档={ _id:'a1', 姓名:'某个名字', 项目:[{ _id:1, 名称:'item1', }, { _id:2, 名称:'item2', }, { _id:3, 名称:“项目3”, }, { _id:4, 名称:'item4', }, ] } 下面的更新负载是一个文档列表 let updates=[{ _id:1, 名称:'item11', }, { _id:2, 名称:'item22', }, { _id:3, 名称:'item33', }, { _id
let文档={
_id:'a1',
姓名:'某个名字',
项目:[{
_id:1,
名称:'item1',
},
{
_id:2,
名称:'item2',
},
{
_id:3,
名称:“项目3”,
},
{
_id:4,
名称:'item4',
},
]
}
下面的更新负载是一个文档列表
let updates=[{
_id:1,
名称:'item11',
},
{
_id:2,
名称:'item22',
},
{
_id:3,
名称:'item33',
},
{
_id:4,
名称:'item44',
},
]
我想用更新负载中具有相同\u id的项目更新集合中的每个项目
如何做到这一点?这是一个与每个唯一的\u id
相关的过于具体的更新(因此不起作用-这不是“很多”每个\u id
都是唯一的)。可能相关:
在您的情况下,这就像运行4次updateOne
(每次都将名称更改为某个值)
一个选项是使用bulkWrite
:
另一个选项是使用普通Javascript(And或),并对数组中的每个项updateOne
仅概述(您应该在MongoDB游乐场下测试此概念)
db.myCollection.bulkWrite([
{ updateOne : {
"filter" : { "_id" : "1" },
"update" : { $set : { "name" : "item11" } }
},
{ updateOne : {
"filter" : { "_id" : "2" },
"update" : { $set : { "name" : "item22" } }
}
]);
updates.map(function(item) {
console.log(item._id); // 1 2 3 4
console.log(item.name); // item11 item22 item33 item44
db.myCollection.updateOne(
{ "_id" : item._id }, /* filter */
{ $set: { "_id" : item.name } } /* update */
);
})