2015-11-03 141 views
1

如何从MongoDB中的集合中除去前n个对象?例如,我只想保留我的集合中的前2000个对象,但目前有15000个对象。MongoDB - 从集合中删除对象

编辑:我的问题比this相关的问题更普遍。不是重复的。

+0

相关问题[如何删除mongodb中的N个文档](http://stackoverflow.com/questions/19065615/how-to-delete-n-numbers-of-documents-in-mongodb)。 – chridam

回答

2

你可以选择第一个N文件的ID(您想保留):

var ids = []; 
db.collection.find().limit(N).toArray().map(function(doc){ 
    ids.push(doc._id); 
}); 

然后,您执行以下查询:

db.collection.remove({_id:{$nin:ids}}) 

这消除每一个元组,其ID不在数组ids中。有关$nin(即“不在”)运营商的更多信息,请参阅this link

+0

不错的解决方案。谢谢 :) –

1

您是否考虑过限制收集max参数? https://docs.mongodb.org/manual/core/capped-collections/

db.createCollection( “日志”,{封顶:真正的,最大:2000});

如果你真的只是想删除所有的但最新的2000个对象,你可以找到_id并删除所有的东西$lt比_id。

+0

那时他会有一些不完全易处理的东西。请注意,您无法从加盖集合中删除文档!这将是一个固定大小的集合。 – Eleanore

+0

你说得对。然而,用户问:“我只想保留我的收藏中的第一批2000个物品 - 因此收藏不足。 – jpaljasma

+0

是的,我同意。如果那个集合(允许我这个词)“死”,你的解决方案就能正常工作,即他不会修改它的大小。如果他想做更多的事情 - 在缩小之后,那么可能需要另一种解决方案。 – Eleanore