【问题标题】:MongoDB: Remove all array entries except the last X entriesMongoDB:删除除最后 X 个条目之外的所有数组条目
【发布时间】:2014-05-15 09:44:11
【问题描述】:

Node.JS MongoDB Driver 被使用。 数据库条目如下所示:

{
    _id: ObjectId("224444202654a21928801814"),
    category: "Test", 
    entries: [
        {
            _id: ObjectId("324444202dd4a21328802214"),
            username: "Tester",
        },
        {
            _id: ObjectId("324444232dd4a21328802215"),
            username: "Tester2",
        }
        [many more...]
    ]
}

条目数组中有数千个对象。 最后的数组条目是最新的。 现在应该删除条目数组中的所有对象,除了最后 50 个条目。 是否有可能通过一次更新/删除调用来实现这一目标?也许使用$slice 运算符?

【问题讨论】:

  • 我能够获得不在最后 50 条记录中的条目。现在想办法删除它们。

标签: arrays node.js mongodb


【解决方案1】:

使用 $slice 运算符无法实现您想要的。我认为在光标forEach() 中使用javascript slice 运算符是您最好的选择。试试这个:

db.foo.find({}).forEach( function(doc) { 
    db.foo.update(
        {_id:doc._id}, 
        {$set:{entries:doc.entries.slice(doc.entries.length - 50)}}
    ) 
})

注意:上述命令在 Mongo Shell 中运行良好。

【讨论】:

  • 好的,我暂时使用这个解决方案。
猜你喜欢
  • 2012-11-23
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多