假设我有这样的文件
{ "_id" : ObjectId("544946347db27ca99e20a95f"), "name" : "Foo Bar",'firstName':"foo", "lastName":"bar" }
如果我执行两个单独的更新,例如
update({'_id':'544946347db27ca99e20a95f'},{$set:{'lastName':'BARBAR'}})
update({'_id':'544946347db27ca99e20a95f'},{$set:{'name':'Foo BARBAR'}})
它是两个单独的事务还是聚合它们并进行一次写入?
如果我需要了解有关内部工作的更多信息,我应该搜索什么?
感谢您的帮助。
答案 0 :(得分:1)
这是两个不同的更新操作。
在几乎所有MongoDB操作员中,您都可以使用许多字段。所以最好的方法是:
db.collection.update({ '_id':'544946347db27ca99e20a95f'}, {
'$set': { 'lastName': 'BARBAR', 'name': 'Foo BARBAR' }
})
您可以在官方documentation中了解有关运营商的更多信息。例如,$set
运算符具有以下语法:
{ $set: { <field1>: <value1>, ... } }
您可能希望使用"Bulk" API,在这种情况下,重写您的函数,以便可以使用批量对象参数。
var bulk = db.collection.initializeOrderedBulkOp();
function foo(bulk){
// do something
bulk.find({ "_id": "544946347db27ca99e20a95f" }).updateOne({
"$set": { "lastName": "BARBAR" }
// do another thing
});
}
function bar(bulk){
// do something
bulk.find({ "_id": "544946347db27ca99e20a95f" }).updateOne({
"$set": { "name": "Foo BARBAR" }
// do another thing
});
}
foo(bulk);
bar(bulk);
bulk.execute();