Mongodb, как обновить более одного массива документов - PullRequest
1 голос
/ 08 мая 2019

Может кто-нибудь сказать мне, пожалуйста, как обновить более одного элемента в массиве?У меня есть объект вроде:

{
    _id: 1,
    name: 'x',
    someArray: [
        {'a': 1},
        {'a': 1, 'b': 2},
        {'a': 2}
    ]
}

Я хотел бы обновить все элементы в someArray, где 'a' == 1 .Я пытался сделать это с помощью команды

db.collection.update(
    {_id: 1, 'somaArray.a': 1}, 
    {$set: {'someArray.$.c': 3}}, 
    {multi: true}
)

, но эта команда обновила только один элемент в someArray .Второй не обновляется.Результат выглядит так:

{
    _id: 1,
    name: 'x',
    someArray: [
        {'a': 1, 'c': 3},
        {'a': 1, 'b': 2},
        {'a': 2}
    ]
}

Как добиться обновления всех элементов, соответствующих условию?Спасибо.

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Попробуйте как показано ниже: (Чтение)

db.collection.update({_id:1},
    {
        $set: {
            'someArray.$[elem].c': 3 
        }        
    },
    { arrayFilters: [{ "elem.a": 1 }], multi: true, "upsert": true }
)

Результат будет выглядеть следующим образом:

{
    "_id" : 1,
    "name" : "x",
    "someArray" : [
        {
            "a" : 1,
            "c" : 3
        },
        {
            "a" : 1,
            "b" : 2,
            "c" : 3
        },
        {
            "a" : 2
        }
    ]
}
0 голосов
/ 09 мая 2019

я думаю, что этот вопрос похож на ваш

визит ( Как обновить несколько элементов массива в mongodb )!и проверить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...