MongoDB:删除除最后X个条目之外的所有数组条目

时间:2014-04-03 13:46:46

标签: arrays node.js mongodb

使用

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

注意:以上命令在Mongo Shell中运行正常。