2014-04-03 88 views
1

使用Node.JS MongoDB Driver。 数据库条目看起来像:MongoDB:删除除最后X个条目以外的所有数组条目

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

有成千上万的条目数组中的对象。 最后的数组条目是最新的数组条目。 现在除了最后的50个条目之外,所有对象都应该在条目数组中删除。 是否有可能通过一次更新/删除呼叫来实现该目标?也许与$slice运营商?

+0

我能够获得不在最近50条记录中的条目。现在找到删除它们的方法。 – dikesh

回答

0

用$ 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)}} 
    ) 
}) 

注:上面的命令将运行在蒙戈壳牌罚款。

+0

好的,我现在将使用此解决方案。 – David