Mongodb обновить массив внутри объекта - PullRequest
1 голос
/ 19 февраля 2020

Я не могу написать запрос, который обновил бы значение массива, который находится внутри объекта:

Допустим, у меня есть коллекция, в которой есть записи документа со структурой, как показано ниже (Есть 2 записей в примере, но на самом деле есть несколько тысяч, которые мне нужно обновить в моей БД)

/* 1 */
{
    "name" : "Bob",
    "info" : {
        "species" : "human",
        "addresses" : [ 
            "one",
            "two"
        ]
    }
},
/* 2 */
{
    "name" : "John",
    "info" : {
        "species" : "human",
        "addresses" : [ 
            "two",
            "three"
        ]
    },
}

Как мне обновить все документы в этой коллекции, чтобы все адреса в массиве info.addresses имели значение * Значение 1007 * будет изменено на значение four?

Примеры в документации go дБ разрешают такие случаи, когда массивы не находятся внутри объектов, но я не могу заставить их работать с массивами внутри объектов

Пример - этот запрос должен обновить все массивы info.addresses для всех документов и изменить значения записей с one на four

db.getCollection('test').update({"info.addresses": "one"},{ $set: { "info.addresses.$" : "four" } })

Ответы [ 2 ]

1 голос
/ 20 февраля 2020
db.getCollection('test').update({"info.addresses": "one"},{ $set: { "info.addresses.$[]" : "four" } })

Обратите внимание, как я добавил квадратные скобки "[]" в массив, указанный в $ set. Он ($ []) является позиционным оператором в mongodb. Подробнее об этом можно прочитать в документации Mongodb.

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

0 голосов
/ 20 февраля 2020

заменить update на updateMany для обновления всех массивов info.addresses.

db.getCollection('text').updateMany( {'info.addresses':'one'}, {$set:{'info.addresses.$':'two'}} )

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