mongodb如何在内部更新工作?

时间:2015-08-24 07:01:02

标签: mongodb

假设我有这样的文件

{ "_id" : ObjectId("544946347db27ca99e20a95f"), "name" : "Foo Bar",'firstName':"foo", "lastName":"bar" }

如果我执行两个单独的更新,例如

update({'_id':'544946347db27ca99e20a95f'},{$set:{'lastName':'BARBAR'}})
update({'_id':'544946347db27ca99e20a95f'},{$set:{'name':'Foo BARBAR'}})

它是两个单独的事务还是聚合它们并进行一次写入?

如果我需要了解有关内部工作的更多信息,我应该搜索什么?

感谢您的帮助。

1 个答案:

答案 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();