我尝试使用同一个集合中的数据来更新集合中的字段,但是要从其中的子子字段更新,并且要么无法正确使用语法,要么我可以使用我只是做错了。
我现在花了很长时间在这里挖掘,但似乎无法到达任何地方。
以下是用户集合的示例结构:
{
"_id": "12345qwerty",
"services": {
"oauth": {
"CharacterID": 12345678,
"CharacterName": "Official Username",
},
},
"name": "what I want to change",
"username": "OfficialUsername"
}
我尝试做的事情对于SQL来说非常简单,即:更新所有显示名称以匹配可靠来源......
update users
set name = services.oauth.CharacterName;
...但是我在使用MongoDB时遇到了麻烦,我觉得我做错了。
这是我到目前为止所拥有的,但它没有按预期工作。
db.users.find().snapshot().forEach(
function (elem) {
db.users.update(
{ _id: elem._id },
{ $set: { name: elem.services.oauth.CharacterName } }
);
}
);
我可以将名称设置为基本级别的任何名称,但不能将其设置为来自子级别的名称,因为它不会识别子字段。
非常感谢任何帮助!
答案 0 :(得分:-1)
db.users.update({"services.oauth.CharacterName": {$exists: true}},{$set: {"name": "services.oauth.CharacterName"}},{multi:true})
我将文档根目录的名称设置为等于子子文档中的services.oauth.CharacterName中的值。 multi = true将更新多个文档,我只更新具有services.oauth.CharacterName值的文档。