#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
insidefindAndModify
при использовании конвейера агрегации. Копируя I, если mongo загружает сохраненный массив в память, чтобы объединить его со вторым массивом, или он просто добавляет к нему новые элементы
Ответ №1:
Тип выполняемой операции не имеет значения.
Объекты BSON хранятся в упакованном формате, поэтому изменение размера данных, безусловно, потребует получения буфера немного большего размера, копирования оригинала в новое местоположение и применения изменений.
Базовый механизм хранения данных сохраняет исходный документ в своем кэше в неизменяемом формате вместе со списком пропущенных изменений, которые были внесены. Список пропусков согласовывается с исходным документом и сохраняется на диске во время контрольной точки или удаления.