在MongoDB中插入和更新字段

时间:2017-04-27 03:28:31

标签: mongodb meteor

我想用电子邮件更新所有收集字段profile.email。[0]。在SQL中使用这样的地址:

 update dbo.users
  set profile.email=emials.[0].address

我知道这个愚蠢的代码也无法在SQL上运行。只要把它放在我需要的地方就明白了。

它是这样的,但是不起作用:

  db.getCollection('users').update(
   {_id: "QYoHQkTuTXnEC6Pws"},
    {$set:
        {'profile.email': db.getCollection('users').aggregate({$match: {_id:'QYoHQkTuTXnEC6Pws'}}, 
             {$project: {_id:0,email: {$arrayElemAt: 
 ['$emails.address',0]}}})
      }
  }
 )

结果不正确:

  "email" : {
        "_batch" : [ 
            {
                "email" : "deleted_sadaf@ham.com"
            }
        ],
        "_useReadCommands" : true,
        "_cursorid" : NumberLong(0),
        "_batchSize" : undefined,
        "_ns" : "meteor.users",
        "_db" : {
            "_mongo" : {
                "slaveOk" : true,
                "host" : "localhost:3001",
                "defaultDB" : "",
                "_readMode" : "commands",
                "_writeMode" : "commands"
            },
            "_name" : "meteor"
        },
        "_collName" : "users",
        "_cursorHandle" : {}
    }

2 个答案:

答案 0 :(得分:1)

您必须遍历每个文档并进行更新以获得预期结果。

db.users.find({}).forEach(function (user) {
   db.users.update({_id: user._id}, {$set: {'profile.email': user.emails[0].address}});
});

答案 1 :(得分:-1)

db.users.update({_id: "doc id"},
    {$set: {'profile.email': db.users.find({_id: "doc id"}).emails[0].address}
})

您的任务有两个步骤: 1.获取电子邮件地址,该地址由" db.users.find"执行。 2.更新文档,该文档由" db.users.update"

执行