2015-11-03 139 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