我有一些要添加到收藏夹中的文档。
我想在一个动作中添加数组中的所有对象,当我有东西存在时,我想替换它。
{"a":0, "b":0, "myKey": "aaaaaa"}
{"a":0, "b":0, "myKey": "hhhhhh"}
{"a":0, "b":0, "myKey": "oooooo"}
{"a":0, "b":0, "myKey": "mmmmmm"}
{"a":0, "b":0, "myKey": "eeeeee"}
当myKey是对象的唯一键时,我的集合如下所示:
这些是我要添加到集合中的文档:
[
{"a":1, "b":2, "myKey": "aaaaaa"},
{"a":2, "b":3, "myKey": "bbbbbb"},
{"a":3, "b":4, "myKey": "cccccc"},
{"a":4, "b":5, "myKey": "dddddd"},
{"a":6, "b":7, "myKey": "eeeeee"}
]
我希望我的收藏看起来像这样
{"a":1, "b":2, "myKey": "aaaaaa"}
{"a":0, "b":0, "myKey": "hhhhhh"}
{"a":0, "b":0, "myKey": "oooooo"}
{"a":0, "b":0, "myKey": "mmmmmm"}
{"a":6, "b":7, "myKey": "eeeeee"}
{"a":2, "b":3, "myKey": "bbbbbb"}
{"a":3, "b":4, "myKey": "cccccc"}
{"a":4, "b":5, "myKey": "dddddd"}
有什么方法可以执行而无需发送许多更新操作?
您可以bulkWrite
按以下方式使用此操作:
const array = [
{"a":1, "b":2, "myKey": "aaaaaa"},
{"a":2, "b":3, "myKey": "bbbbbb"},
{"a":3, "b":4, "myKey": "cccccc"},
{"a":4, "b":5, "myKey": "dddddd"},
{"a":6, "b":7, "myKey": "eeeeee"}
];
let ops = [];
array.forEach(({ a, b, myKey }) => {
ops.push({
"updateOne": {
"filter": { myKey },
"update": { "$set": { a, b, myKey } },
"upsert": true
}
})
});
db.collection.bulkWrite(ops);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句