2011-06-17 86 views
0

我想刪除舊的聊天記錄,也就是除了最新的10個記錄以外的任何記錄。mongodb刪除舊聊天

這裏是我應得的最新:

collection.find({"chatroom" : chatroom}).limit(10).sort({ time: -1 }) 

如何刪除一切?

謝謝。

回答

3

您可以執行查詢以獲得第10個最舊的查詢,然後刪除比這更早的查詢。

var oldest = find({"chatroom" : chatroom}).limit(1).skip(10).sort({ time: -1 }).next(); 
remove({"chatroom" : chatroom, time : {$lt : oldest.time }}) 
+0

不應該 - >時間:{$ lt:oldest.time} – levhita 2013-01-26 03:36:17

+0

levhita:是的,固定的。接得好。 – 2013-01-29 17:12:35

0

如果通過適當的過濾器獲取相關文檔,您必須對結果集的每個項目進行迭代並逐個刪除它。

-1

你需要多久做一次? 我們在談論多少文檔?

其中一個選項: 從臨時收集

此舉最新的10到一些臨時集合 空日誌收集 重新插入可能不是最佳的解決方案。

+0

每當我得到最新的10個我轉儲舊的。如果這太頻繁,那麼我可以做得更少。 – Harry 2011-06-17 10:44:05

+0

您應該在某處保留一個總計數,然後在每次插入時遞增並在每次刪除時遞減。您閱讀此計數以確定您是否有超過10個項目。否則,你如何檢查? – kheya 2011-06-17 19:27:17

0

如何使用capped collection?在size參數

保留足夠的空間,並設置max至10

你可能想於swtich sort({ time: -1 })sort({ $natural: -1 })有更好的表現,如果你切換到封頂集合(其中兩個訂單將是我猜想的一樣)。

+1

我真的不想爲每個聊天室創建一個新的收藏夾 – Harry 2011-06-18 05:48:44