【问题标题】:MongoDB $concatArrays in findAndModifyfindAndModify 中的 MongoDB $concatArrays
【发布时间】:2020-12-07 23:30:43
【问题描述】:

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

为了更好的说明,这里举个例子:

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

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

【问题讨论】:

  • 复制myArray是什么意思?我认为您正在寻找 $push{ $each: []} docs.mongodb.com/manual/reference/operator/update/each/…
  • 当您使用聚合管道时,您不能在 findAndModify 的更新中使用 push。通过复制 I if mongo 将存储的数组加载到内存中以便将它与第二个数组连接起来,或者它只是将新元素附加到它

标签: mongodb findandmodify


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2015-11-18
    相关资源
    最近更新 更多