我想用电子邮件更新所有收集字段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" : {}
}
答案 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"
执行