Как обновить элемент массива Meteor внутри документа - PullRequest
0 голосов
/ 10 марта 2020

У меня есть документ Meteor Mon go, как показано ниже

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

Я хочу обновить адрес электронной почты указанного элемента массива c с помощью специально созданного идентификатора, используя запрос Meteor, как показано ниже.

например, я хочу обновить документ, если '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? Спасибо !

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Ваш запрос на самом деле почти правильный, за исключением небольшой части, где мы хотим идентифицировать элемент, который будет обновляться по его индексу.

Divisions.update({
"activityId": "aRDABihAYFoAW7jbC",
 "users.id": "b1@gmail.com"
}, {
$set: {"users.$.id": "b2@gmail.com"}
})
1 голос
/ 10 марта 2020

Вам может понадобиться опция 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/

0 голосов
/ 10 марта 2020

Вам нужно использовать оператор $ pu sh вместо $ set.

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

...