使用$ set

时间:2015-05-13 14:45:57

标签: mongodb mongodb-update embedded-documents

我有一份这种形式的文件

{
   "firstName": "John",
   "lastName": "Doe",
   "preferences": {
      "xxx": true,
      "yyy": false,
      "zzz": true
   }
}

我想更新preferences嵌入文档中的特定字段。如果我按以下方式使用$set操作数

db.users.update({name: "John"}, {$set: {preferences: {"xxx": false}}})

preferences文档已完全替换,所以我得到了这个

{
   "firstName": "John",
   "lastName": "Doe",
   "preferences": {
      "xxx": false
   }
}

虽然我想获得这个

{
   "firstName": "John",
   "lastName": "Doe",
   "preferences": {
      "xxx": false,
      "yyy": false,
      "zzz": true
   }
}

我无法使用:

db.users.update({name: "John"}, {$set: {"preferences.xxx": false}})

因为我不知道我要更新哪个特定字段,所以我只输入一个可能包含或不包含preferences文档的每个字段的对象。

1 个答案:

答案 0 :(得分:2)

尝试在更新之前创建更新对象。例如,如果您输入了对象PCMU,则可以使用JavaScript的 bracket notation 来创建更新对象,如下所示:

{"xxx": false, "abc": false}