MongoDB 更新文档对象

MongoDB update document object

user = users.findOne({
    "$or": [{
        'local.email': 'some@email.com'
    }, {
        'google.email': 'some@email.com'
    }, {
        'facebook.email': 'some@email.com'
    }] 
// do stuff with user object

所以我有 user 对象。这很好,在我完成我需要的东西后 属性 明智的我现在希望更新这个对象中的一些字段,我已经尝试了以下但没有工作:

user.local.email = 'other@email.com';
users.update(user);

这不是更新文档的可行方法吗?

使用 $set 运算符更新您的文档,如下所示:

db.users.update(
   {
       "$or": [
           {'local.email': 'some@email.com'}, 
           {'google.email': 'some@email.com'}, 
           {'facebook.email': 'some@email.com'}
        ]
   },
   { 
       $set: {
          'local.email': 'other@email.com'
       }
   }
)

使用更新方法,您不需要执行另一个查询来查找要更新的文档,因为 update() method takes in a query parameter which is the selection criteria for the update, the same query selectors as in the find() method are available. Read more on the update method in the Mongo docs here.

这是更适合的解决方案。

user.local.email = 'other@email.com';
users.update({
    "$or": [{
        'local.email': 'some@email.com'
    }, {
        'google.email': 'some@email.com'
    }, {
        'facebook.email': 'some@email.com'
    }]
}, user);