findAndModify中的MongoDB $ concatArrays

问题描述

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

为了更好地说明它,下面是一个示例:

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

Mongo是否足够聪明,或者只需将[1,2]附加到myArray而不首先复制myArray

解决方法

正在执行的操作类型无关。

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

基础存储引擎以不变的格式将原始文档以及已更改的跳过列表存储在其缓存中。跳过列表与原始文档一致,并在检查点或逐出期间存储在磁盘上。