0

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

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

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

Mongo 是否足够聪明或者只是简单地追加[1, 2]而不首先myArray复制myArray

4

1 回答 1

1

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

BSON 对象以打包格式存储,因此更改数据的大小肯定需要获得稍大的缓冲区,将原始对象复制到新位置并应用更改。

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

于 2020-08-18T20:14:08.317 回答