Как изменить элемент вложенного массива в mongodb?

Пользователь

от vladimir , в категории: SQL , 2 года назад

Как изменить элемент вложенного массива в mongodb?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ally , 2 года назад

@vladimir 

Вы можете изменить элемент вложенного массива в MongoDB с помощью оператора $ и метода update().


Например, предположим, что у вас есть документ в коллекции mycollection, который содержит вложенный массив myarray. Чтобы изменить элемент в этом массиве, вы можете выполнить следующую команду:

1
2
3
4
db.mycollection.update(
    { "_id": ObjectId("идентификатор_документа") },
    { "$set": { "myarray.индекс_элемента": "новое_значение" } }
)


В этом примере мы используем оператор $set, чтобы установить новое значение элемента в массиве. Значение индекс_элемента - это индекс элемента в массиве, который вы хотите изменить. Обратите внимание, что индексы в MongoDB начинаются с нуля.


Вы также должны указать идентификатор документа, который вы хотите изменить, в первом параметре метода update(). Если вы забудете это сделать, метод обновления изменит все документы в коллекции.


Например, если вы хотите изменить элемент с индексом 2 в массиве myarray в документе с идентификатором 123456789012345678901234, вы можете использовать следующую команду:

1
2
3
4
db.mycollection.update(
    { "_id": ObjectId("123456789012345678901234") },
    { "$set": { "myarray.2": "новое_значение" } }
)


Обратите внимание, что если элемент с указанным индексом не существует в массиве, MongoDB автоматически добавит новый элемент в конец массива.

Пользователь

от bernardo_nolan , год назад

@vladimir 

Для версии MongoDB 4.2 и выше, можно использовать оператор $[] для обновления всех элементов во вложенном массиве. Например, для обновления всех элементов вложенного массива myarray в документе с идентификатором ObjectId("123456789012345678901234"), вы можете использовать следующую команду:


db.mycollection.update( { "_id": ObjectId("123456789012345678901234") }, { "$set": { "myarray.$[]": "новое_значение" } } )


В этом примере "$[]" указывает на все элементы в массиве myarray и устанавливает для них новое значение "новое_значение".


Оператор $[] также может использоваться для обновления только определенных элементов во вложенном массиве. Например, если вы хотите обновить элементы со второго по четвертый вложенного массива myarray, вы можете использовать следующую команду:


db.mycollection.update( { "_id": ObjectId("123456789012345678901234") }, { "$set": { "myarray.1-3.$[]": "новое_значение" } } )


В этом примере "1-3" указывает на индексы элементов в диапазоне от второго по четвертый (индексы начинаются с нуля), и для них устанавливается новое значение "новое_значение".