Mongo - 更新嵌套数组中的元素

时间:2016-08-29 19:01:38

标签: mongodb updates

我的文档看起来像

{
  _id: "123xyz",
  profile: {
    emails: [
      {
        "address" : "foo@gmail.com",
        "primary" : true
      },
      {
        "address" : "bar@gmail.com",
        "primary" : false
      }
    ]
  }
}

当用户将电子邮件地址设置为主要电子邮件地址,并且如果他已经有其他电子邮件时,我想将其他电子邮件设置为非主要电子邮件,即我希望将所有电子邮件与新的主电子邮件地址设置为不同的标记{ {1}}。根据{{​​3}}等其他一些SO答案,这应该有效:

primary: false

但它失败了db.users.update( { _id: userId, 'profile.emails.address': { $ne: newEmailAddress } }, { $set: { 'profile.emails.$.primary': false } } );

原始文档目前只有一封不同于The positional operator did not find the match needed from the query. Unexpanded update: profile.emails.$.primary的电子邮件。

1 个答案:

答案 0 :(得分:2)

在这里,我找到了您的问题的答案: Update an item in an array that is in an array

在这种情况下使用该解决方案(使用您的结构):

db.mail.update({"profile.emails": {$elemMatch: {"address": 
{$ne: "new@gmail.com" }}}}, {$set: {"profile.emails.$.primary": "false"}})