MongoDB $concatArrays в findAndModify

#mongodb #findandmodify

#mongodb #findandmodify

Вопрос:

Мне интересно, будет ли $concatArrays в разделе обновления findAndModify скопировать исходный массив, добавить к нему новые элементы и сохранить результат в целевой массив или он просто добавит новые элементы в существующий массив без упомянутой копии.

Чтобы лучше это проиллюстрировать, вот пример:

 db.myCollection.findAndModify ( { _id: 2 },
  [ { $set: { myArray: { $concatArrays: [ "$myArray", [ 1, 2 ]  ] } } } ]
)
  

Достаточно ли Mongo умен, чтобы просто добавить [1, 2] к myArray , не копируя myArray в первую очередь?

Комментарии:

1. Что вы подразумеваете под копированием myArray ? Я думаю, что вы ищете $ push{ $each: []} docs.mongodb.com/manual/reference/operator/update/each /…

2. Вы не можете использовать обновление push inside findAndModify при использовании конвейера агрегации. Копируя I, если mongo загружает сохраненный массив в память, чтобы объединить его со вторым массивом, или он просто добавляет к нему новые элементы

Ответ №1:

Тип выполняемой операции не имеет значения.

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

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