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

Mongodb Mongo-更新嵌套数组中的元素,mongodb,updates,Mongodb,Updates,我有一份文件看起来像 { _id: "123xyz", profile: { emails: [ { "address" : "foo@gmail.com", "primary" : true }, { "address" : "bar@gmail.com", "primary" : false } ] } } 当用户将电子邮件地址设置为主要电子邮件地址时

我有一份文件看起来像

{
  _id: "123xyz",
  profile: {
    emails: [
      {
        "address" : "foo@gmail.com",
        "primary" : true
      },
      {
        "address" : "bar@gmail.com",
        "primary" : false
      }
    ]
  }
}
当用户将电子邮件地址设置为主要电子邮件地址时,如果他已经有其他电子邮件,我想将这些其他电子邮件设置为非主要电子邮件,即我想为所有与新的主要电子邮件不同的电子邮件设置标志
primary:false
。根据其他一些答案,例如,这应该是可行的:

db.users.update(
  { _id: userId, 'profile.emails.address': { $ne: newEmailAddress } },
  { $set: { 'profile.emails.$.primary': false } }
);
但是由于位置操作符没有从查询中找到所需的匹配项,因此它失败。未扩展的更新:profile.emails.$.primary


原始文档当前只有一封电子邮件与
新电子邮件地址不同

在这里,我找到了您问题的答案:

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


请详细说明您想要什么?我希望与
newEmailAddress
不同的电子邮件能够获得标志
primary:false
,并且查询运行时不会失败
db.mail.update({"profile.emails": {$elemMatch: {"address": 
{$ne: "new@gmail.com" }}}}, {$set: {"profile.emails.$.primary": "false"}})