【问题标题】:How can I update an email address in meteor?如何在流星中更新电子邮件地址?
【发布时间】:2015-06-19 06:26:46
【问题描述】:

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

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

【问题讨论】:

  • 该代码有什么问题?
  • 嗨 - 我刚刚更新了我的问题以包含错误
  • 我认为因为 emails 是一个数组,所以代码无法正确定位我的电子邮件索引

标签: javascript mongodb email meteor


【解决方案1】:

因为每个用户都可以拥有多个地址(它是一个数组 - 有关详细信息,请参阅 http://docs.meteor.com/#/full/meteor_users),您需要指定要更新的密钥(在这种情况下,密钥就是地址本身)

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/

希望这会有所帮助。

问候,

雷内

【讨论】:

    【解决方案2】:

    如果您确定用户只有一个地址,那么您可以使用emails.0.address 而不是emails.$.address

    这应该适用于几乎所有用例。例外情况是当有许多电子邮件与用户关联时。在这种情况下:

    如果您在服务器上且仅在服务器上,则可以使用位置运算符更新特定电子邮件(如果有多个地址)。在这种情况下,您需要在更新的查询部分指定当前电子邮件。即:{_id: this.userId, 'emails.$.address' : <current address> }

    $ 位置更新运算符目前在 Meteor 的 mongo 客户端上不可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多