您好我正在使用Meteor构建应用程序,需要更新我的电子邮件地址。我正在使用Meteor帐户包。
我的表单将电子邮件值传递给accountDetails对象,我将其传递给更新我的个人资料的方法(包括我的电子邮件):
Meteor.users.update({_id: this.userId},
{
$set: {
'emails.$.address': accountsDetail.email
}
});
这给了我错误:
Exception while invoking method 'saveAccountInfo' MongoError: The positional operator did not find the match needed from the query. Unexpanded update: emails.$.address
这是我的用户架构:
{
"_id" : "12345",
"emails" : [
{
"address" : "abc123@gmail.com",
"verified" : false
}
有人可以帮忙吗?提前谢谢!
答案 0 :(得分:2)
如果您确定用户有一个地址,则可以使用emails.0.address
代替emails.$.address
。
这几乎适用于所有用例。例外情况是有许多与用户关联的电子邮件。在这种情况下:
如果您在服务器上&amp;只有在服务器上,如果有多个地址,您可以使用位置运算符更新特定的电子邮件。在这种情况下,您需要在更新的查询部分中指定当前电子邮件。我:{_id: this.userId, 'emails.$.address' : <current address> }
Meteor中的mongo客户端目前无法使用$
位置更新运算符。
答案 1 :(得分:1)
因为每个用户都可以拥有多个地址(这是一个数组 - 有关详细信息,请参阅http://docs.meteor.com/#/full/meteor_users),您需要指定要更新的密钥(在这种情况下,密钥是地址本身)< / p>
Meteor.users.update({_id: this.userId, "emails.address":"me@domain.com"},
$set:{'emails.$.address': accountsDetail.email}
});
如果每个用户只有一封电子邮件,您也可以考虑删除此邮件并插入新邮件。有关详细信息,请参阅http://docs.mongodb.org/manual/reference/operator/update/pop/。
希望这有帮助。
此致
勒