【问题标题】:How to remove first n elements from mongodb array?如何从 mongodb 数组中删除前 n 个元素?
【发布时间】:2012-04-01 18:08:43
【问题描述】:

我在 mongodb 中有这样的文档:

{uid:1212, outbox:
 [
   {msg1},
   {msg2},
   {msg3},
   ...
   {msgN}
 ]
}
我想从数组发件箱中原子地删除前 n 个元素。 我知道两种从数组中删除元素的方法 1) $流行音乐 但它只删除了一个元素 2) {$pull:{outbox:null}} 之后的 {$unset:{outbox.0:1}} 但它不是原子的,只删除一个元素

更新 目前这是不可能的

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我认为你可以这样做:

    db.data.update(
       {uid:1212}, 
       db.data.findOne({uid:1212}, {outbox: {$slice: [2,2]}, uid: 1, _id: 0 })
    );
    

    这将有效地用新数据替换整个记录,因此您需要小心处理它。您需要知道发件箱数组的长度才能获得正确的数字。也就是说,在这种情况下,$slice 选项将跳过 2 条记录,然后返回接下来的两条记录。似乎没有办法跳过两个然后返回剩余的项目。

    第一部分,{uid:1212} 将操作限制为单个文档,第二部分返回节点,但包含这些数组元素的子集,并用作更新的数据。

    更多关于 $slice 的信息在这里:http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements

    这对你有用吗?

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2017-12-22
      • 2011-11-13
      • 2015-06-12
      相关资源
      最近更新 更多