【问题标题】:How to update Meteor array element inside a document如何更新文档中的 Meteor 数组元素
【发布时间】:2020-03-11 01:40:16
【问题描述】:

我有一个 Meteor Mongo 文档,如下所示

{
    "_id" : "zFndWBZTvZPgSKXHP",
    "activityId" : "aRDABihAYFoAW7jbC",
    "activityTitle" : "Test Mongo Document",
    "users" : [
        {
            "id" : "b1@gmail.com",
            "type" : "free"
        },
                {
            "id" : "JqKvymryNaCjjKrAR",
            "type" : "free"
        },
    ],
}

我想使用类似下面的 Meteor 查询使用自定义生成的 id 更新特定数组元素的电子邮件。

例如,我想更新文档 如果'users.id' == "b1@gmail.com" 则更新为users.id = 'SomeIDXXX'

所以更新后的文档应该如下所示。

{
    "_id" : "zFndWBZTvZPgSKXHP",
    "activityId" : "aRDABihAYFoAW7jbC",
    "activityTitle" : "Test Mongo Document",
    "users" : [
        {
            "id" : "SomeIDXXX",
            "type" : "free"
        },
        {
            "id" : "JqKvymryNaCjjKrAR",
            "type" : "free"
        },

    ],
}

我尝试了以下方法,但没有成功。

 Divisions.update(
      { activityId: activityId, "users.id": emailId },
      { $set: { "users": { id: _id } } }
    );

有人可以帮助我进行相关的 Meteor 查询吗?谢谢 !

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    您的查询实际上几乎是正确的,除了一小部分我们希望通过其索引来识别要更新的元素。

    Divisions.update({
    "activityId": "aRDABihAYFoAW7jbC",
     "users.id": "b1@gmail.com"
    }, {
    $set: {"users.$.id": "b2@gmail.com"}
    })
    

    【讨论】:

      【解决方案2】:

      您可能需要 arrayFilters 选项。

      Divisions.update(
        { activityId: activityId },
        { $set: { "users.$[elem].id": "SomeIDXXX" } },
        { arrayFilters: [ { "elem.id": "b1@gmail.com" } ], multi: true }
      );
      

      https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/

      【讨论】:

        【解决方案3】:

        您需要使用$push operator 而不是$set。

        { $push: { <field1>: <value1>, ... } }

        【讨论】:

        • 这会将一个新对象添加到数组中。 Syam 正在询问如何更新数组中的现有对象。
        • 是的@BartS 说的是对的。我想更新现有元素。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 2011-12-19
        • 2018-12-14
        • 2016-04-14
        相关资源
        最近更新 更多