的Mongo舊文件中刪除在我目前的項目中,我們使用Mongo來存儲大量文件(大約100Bln)。 如何使用字段_id刪除一半最舊的文檔,因爲如果我使用索引字段「timestamp」,則此操作將在當前速度達到3年後完成。從編號爲
Q
從編號爲
4
A
回答
3
這裏是一個MongoDB的用戶谷歌網上論壇帖子,討論基於時間戳生成的ObjectID鏈接: http://groups.google.com/group/mongodb-user/browse_thread/thread/262223bb0bd52a83/3fd9b01d0ad2c41b
從帖子: 提取從蒙戈的ObjectID時間戳在 蒙戈文檔解釋「優化對象ID」 http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield。
在後從示例獲取的,可以從時間,以秒Unix時間創建的ObjectID:
> now = new Date()
ISODate("2012-04-19T19:01:58.841Z")
> ms = now.getTime()
1334862118841
> sec = Math.floor(ms/1000)
1334862118
> hex = sec.toString(16)
4f906126
> id_string = hex + "0000000000000000"
4f9061260000000000000000
> my_id = ObjectId(id_string)
ObjectId("4f9061260000000000000000")
使用上面的公式,你可以從任何日期創建一個對象ID,以及文件查詢與較小的ObjectIds。展望未來,如果您的應用程序將基於時間保存數據並在達到特定年齡時刪除數據,您可能會發現最好將文檔存儲在單獨的集合中;每天,每週或任何時間框架對您的應用程序最有意義。刪除整個集合需要比刪除單個文檔少很多的開銷,因爲它可以通過單個操作完成。 db.<collection>.remove({query})
將針對每個返回的文檔執行寫入操作,正如您所觀察到的,對於大量文檔而言,這可能過於緩慢。
2
只需找到中間_id並刪除所有的舊條目:
蒙戈外殼:
// get total documents count/2
var c = Math.floor(db.collection.stats()['count']/2)
// find middle id
var mid_id = db.collection.find().skip(c).limit(1)[0]._id
// remove all ids older than the middle one
db.collection.remove({_id:{$lt:mid_id}})
相關問題
- 1. 編號爲
- 2. jquery從編號獲得編號
- 3. JavaScript從編號獲取編號
- 4. 雙指數編號爲線性編號
- 5. 從按鍵獲取編號爲Int
- 6. svn從單一編號修改爲major.minor
- 7. Canvas fillStyle從編號
- 8. 通過編號爲
- 9. 回聲編號爲
- 10. 無法爲編號爲
- 11. 「無法將\」0.0 \「編入類型編號。」編號-1700從「0.0」到編號
- 12. Prolog的DCG中:從編程符號轉換爲邏輯符號
- 13. KendoUI網格編號列不會編輯爲編號
- 14. 從計劃中編號和編號或列表和編號構建列表
- 15. 日誌()行爲和編號#符號
- 16. 使列同樣從編號
- 17. 找到objectType從編號
- 18. 如何編號從MySQL
- 19. VBA從HTML獲取編號
- 20. 從目前編號總和
- 21. 爲什麼編號從1改爲1碰巧使用NHibernate
- 22. Vb.net格式編號爲String
- 23. 獲得最大編號爲
- 24. 如果批量編號爲
- 25. 編碼€ - 標號爲HTML
- 26. 如何爲住戶編號?
- 27. wxpython控制編號爲
- 28. ruby YAML解析編號爲
- 29. 在面板編號爲
- 30. DIV在使用編號爲