2015-10-05 94 views
1

MongoDB的aggregation $minquery modifier $min相比find().sort()有什麼區別,返回的最小值爲:db.the_collection.find().sort({the_field:1}).limit(1)

如果每分鐘有幾百次調用來檢索集合中的最小元素並每次獨立使用它,我應該使用哪一個?

旁邊的問題:有人可以用$ min給我看一個正確的語法給我一個集合中的字段的最小值嗎? db.the_collection.find().min({the_field:10})不起作用。

回答

1

要獲得「the_field」的最低值,你應該使用 db.the_collection.find().sort({the_field:1}).limit(1) 所以在這裏,我們首先整理文檔,然後取第一個出來的,你可以從查詢中看到的文檔。

聚合$ min:
當我們將文檔分組到單個文檔中時,我們使用它,並且我們希望將這個單個文檔的值保持爲分組所在文檔的最小值。

$ min運算符:
它用於包含一個特定索引的下限,以約束find()的結果。簡單地說,如果the_field被索引,並且我們想對find()保留一些約束,那麼我們就可以使用它。它通常用於提高性能。
您輸入的語法是正確的,但它需要一個索引字段,結果會與您實際需要的不同。

+0

嗨IMAGIN,我已經the_field收錄我的收集和使用'db.the_collection.find()。 min({the_field:10})'但是得到錯誤: '...排序:{} \ nProj:{} \ n planner返回錯誤:無法找到最大/最小查詢的相關索引「,」code「: 17007' – Melissa

+0

@Melissa:這是對字段the_field'db.the_collection.find()。sort({the_field:1})。limit(1)'獲得最小值rwo的查詢。$ min操作符用於查詢查詢在索引時的性能改進,而不是涉及獲得the_field的最小行。 –

+0

哇感謝imagin這樣一個快速的回覆!我已經在the_field上應用了索引,如果我調用'db.the_collection.find()。sort({the_field:1})。limit(1)'每分鐘數百次?我希望數據庫不會重複做這種事情。 – Melissa

1

因爲min()需要一個字段上的索引,並強制查詢使用該索引,即使可以獲取更好的索引,所以您必須更喜歡$ gte或查詢的排序操作如果可能的話。

db.the_collection.find().sort({the_field:1}).limit(1) 

所以上面的查詢更好的是用作比較$ min的操作。

請參考下面提到的鏈接。 http://docs.mongodb.org/manual/reference/operator/meta/min/#interaction-with-index-selection

當運行在一個沒有索引鍵的極小算,它會給以下錯誤

Error: error: { 
    "$err" : "Unable to execute query: error processing query: ns=db.dbName limit=0 skip=0\nTree: status == \"approved\"\nSort: {}\nProj: {}\n planner returned error: unable to find relevant index for max/min query", 
    "code" : 17007 
} 
相關問題