[英]update multi records and insert if not present
可以说我的测试数据是
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
)
我想更新或插入多条记录,我知道以下查询仅插入1行
db.multiArr.update(
{"ID": {"$in: ["fruit123", "fruit1234"]}},
{"ID": "---", "Keys": "tomato"},
upsert=true
)
您对此的思考是错误的方法。 相反,您采用“数组”并将其转化为运算。 而不是发送多个“请求”,而是在“一个请求”中发送多个“操作”。 使用.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
,其中包含匹配文档,更新和适当更新的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.