如何更新meteor中的电子邮件地址?

时间:2015-04-13 19:52:06

标签: javascript mongodb email meteor

您好我正在使用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
    }

有人可以帮忙吗?提前谢谢!

2 个答案:

答案 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/

希望这有帮助。

此致