Mongodb:使用子子字段中的数据更新字段?

时间:2016-05-31 18:12:34

标签: mongodb mongodb-query

我尝试使用同一个集合中的数据来更新集合中的字段,但是要从其中的子子字段更新,并且要么无法正确使用语法,要么我可以使用我只是做错了。

我现在花了很长时间在这里挖掘,但似乎无法到达任何地方。

以下是用户集合的示例结构:

{
  "_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 } }
    );
  }
);

我可以将名称设置为基本级别的任何名称,但不能将其设置为来自子级别的名称,因为它不会识别子字段。

非常感谢任何帮助!

1 个答案:

答案 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值的文档。