MongoDB findAndModify 中的 $concatArrays

MongoDB $concatArrays in findAndModify

我想知道 findAndModify 的更新部分中的 $concatArrays 是否会复制源数组,向其中添加新元素并将结果保存到目标数组,还是只是追加没有提到的副本的现有数组的新元素。

为了更好地说明,这里有一个例子:

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

Mongo 够聪明吗?只需将 [1, 2] 附加到 myArray 而无需首先复制 myArray

正在执行的操作类型不相关。

BSON objects以压缩格式存储,所以改变数据大小肯定需要获得稍大的缓冲区,将原始数据复制到新位置,然后应用更改。

底层存储引擎将原始文档以不可变的格式存储在其缓存中,以及已进行更改的跳过列表。跳过列表与原始文档协调并在检查点或逐出期间存储在磁盘上。