【发布时间】:2017-01-05 21:40:52
【问题描述】:
我有一个看起来像这样的文档
{
_id: "123xyz",
profile: {
emails: [
{
"address" : "foo@gmail.com",
"primary" : true
},
{
"address" : "bar@gmail.com",
"primary" : false
}
]
}
}
当用户将电子邮件地址设置为主要电子邮件地址时,如果他已经有其他电子邮件,我想将这些其他电子邮件设置为非主要电子邮件,即我想给与新主要电子邮件不同的所有电子邮件标记@ 987654323@。根据 this one 等其他一些 SO 答案,这应该可行:
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 失败
原始文档目前只有一封与newEmailAddress不同的电子邮件。
【问题讨论】:
-
请详细说明你想要什么?
-
好吧,我希望与
newEmailAddress不同的电子邮件能够获得primary: false的标志,并且查询运行不会失败