让我说我的测试数据是
db.multiArr.insert({"ID" : "fruit1","Keys" : "apple"})
db.multiArr.insert({"ID" : "fruit2","Keys" : "carrot"})
db.multiArr.find({'ID': {$in: ['fruit1', 'fruit2']}})
如果我想更新或插入ID,我可以使用
db.multiArr.update(
{'ID': "fruit12"},
{
'ID': "fruit12"
"$push": {
"Keys": "tomato"
}
},
upsert=True
)
我想更新或插入多条记录,我知道下面的查询只插入一行
db.multiArr.update(
{"ID": {"$in: ["fruit123", "fruit1234"]}},
{"ID": "---", "Keys": "tomato"},
upsert=true
)
答案 0 :(得分:0)
你对此的看法是错误的。相反,你拿“阵列”并将其转化为操作。您可以在“一个请求”中发送多个“操作”,而不是发送多个“请求”。使用.bulkWrite()
var newKeys = ["fruit123", "fruit1234" ];
db.multiArr.bulkWrite(
newkeys.map( key => {
return {
"updateOne": {
"filter": { "ID": key },
"update": { "$set": { "Keys": "tomato" } },
"upsert": true
}
}
})
)
这里使用常规JavaScript .map()
将newKeys
的数组内容转换为要发送到服务器的“批量写入操作”语句数组。在其他语言中,基本概念保持不变。
通过线路,服务器的发送和响应在“一个请求”中完成,而发送执行的“包”包含多个动作。
如果需要,所有API中此方法的返回值为BulkWriteResult
,其中包含匹配文档,更新和upsert的详细信息。