我有一個MongoDB集合,需要在所有文檔中找到某個字段的max()值。此值是時間戳,我需要通過查找最大時間戳找到最新的文檔。對它進行排序並獲得第一個效率非常低。我應該分別維護一個'maxval',並在文檔到達時對其進行更新,並且該字段的值較大?有更好的建議嗎? 非常感謝。Mongo沒有max()函數,我該如何解決這個問題?
6
A
回答
3
當然,如果它將是大集合,並且您需要始終顯示最大時間戳,您可能需要在那裏創建單獨的集合並存儲統計數據,而不是每次訂購大集合。
statistic
{
_id = 1,
id_from_time_stamp_collection = 'xxx',
max_timestamp: value
}
而每當新的文檔來只更新ID = 1的統計收集(與查詢$ GT的條件,因此,如果新的時間戳會比max_timestamp然後max_timestamp將被更新更大,否則 - 無)。
也可能你可以存儲和更新統計信息收集中的其他統計數據。
-3
嘗試用db.collection.group
例如,與此集合:
> db.foo.find()
{ "_id" : ObjectId("..."), "a" : 1 }
{ "_id" : ObjectId("..."), "a" : 200 }
{ "_id" : ObjectId("..."), "a" : 230 }
{ "_id" : ObjectId("..."), "a" : -2230 }
{ "_id" : ObjectId("..."), "a" : 5230 }
{ "_id" : ObjectId("..."), "a" : 530 }
{ "_id" : ObjectId("..."), "a" : 1530 }
您可以使用group
使用
> db.foo.group({
initial: { },
reduce: function(doc, acc) {
if(acc.hasOwnProperty('max')) {
if(acc.max < doc.a)
acc.max = doc.a;
} else {
acc.max = doc.a
}
}
})
[ { "max" : 5230 } ]
由於在group
根本沒有key
值對象被分組在單個結果中
+0
這種方法太慢了。其他缺點是該小組不能在分片環境中工作 – Daimon 2011-06-13 10:02:44
18
,如果你對timestsamp的一個索引,找到的最高值是efficientl像
db.things.find().sort({ts:-1}).limit(1)
,但如果具有一定的折射率是太多的開銷存儲在一個單獨的集合,最大可能是很好的。
相關問題
- 1. 我該如何解決這個問題?
- 2. 我該如何解決這個問題?
- 3. 我該如何解決這個問題
- 4. 我該如何解決這個問題?
- 5. 我該如何解決這個問題?
- 6. 我該如何解決這個問題?
- 7. 我該如何解決這個問題?
- 8. 我該如何解決這個問題?
- 9. 我該如何解決這個問題?
- 10. 我該如何解決這個問題?
- 11. 我該如何解決這個問題?
- 12. 我該如何解決這個問題?
- 13. 我該如何解決這個問題?
- 14. 這個javascript函數沒有定義?我該如何解決它?
- 15. SQLite沒有DATE數據類型?我該如何解決這個問題?
- 16. 問題與編碼,我該如何解決這個問題?
- 17. 我的if語句沒有執行,我該如何解決這個問題?
- 18. 有沒有PHP函數來解決這個問題?
- 19. 多維數組,我該如何解決這個問題?
- 20. 這是什麼錯誤?我該如何解決這個問題?
- 21. 我該如何解決這個問題? builtins.AttributeError:'NoneType'對象沒有屬性'_helper'
- 22. fopen沒有打開文件流......我該如何解決這個問題?
- 23. 'Windows PHP PDO需要nextRowset而'Nix沒有,我該如何解決這個問題?
- 24. 我該如何解決這個問題:<class'website.admin.UserProfileInline'>:(admin.E202)'website.Profile'沒有ForeignKey爲'website.Doctor'?
- 25. 我該如何解決這個問題?我在程序
- 26. 跳過我的代碼,我該如何解決這個問題?
- 27. x軸沒有任何數字,如何解決這個問題?
- 28. jQuery和.Load()函數掛起,我該如何解決這個問題?
- 29. 任何人都可以幫助我解決這個問題,盡我所能,但沒有解決這個問題?
- 30. 我如何解決這個plist問題?
安德魯,是的,集合會變得非常快 - 想象它們是日誌記錄(不完全相同但是相同的想法) - 並且它們在一天左右進入數十萬行。我不必顯示max_ts就可以使用它來查找給定密鑰的最後保存記錄,該記錄具有基於客戶訪問網站保存的一系列記錄。所以你的建議就是我想的。 – Nitin 2011-06-13 22:33:49