2015-06-20 79 views
2

我試圖獲得兒童價值的最高價值。如果我有這樣的兩個文件MongoDB - 獲得最高的兒童價值

{ 
    "_id" : ObjectId("5585b8359557d21f44e1d857"), 
    "test" : { 
     "number" : 1, 
     "number2" : 1 
    } 
} 

{ 
    "_id" : ObjectId("5585b8569557d21f44e1d858"), 
    "test" : { 
     "number" : 2, 
     "number2" : 1 
    } 
} 

我該如何獲得關鍵「數字」的最高值?

+0

類似於http:// stackoverflow .com/questions/4762980 /獲得最高性價比的MongoDB。我認爲這不是重複,因爲你想獲得子最大值而不是單個列的最大值。 – Dinei

回答

2

使用點符號:

db.testSOF.find().sort({'test.number': -1}).limit(1) 
+0

你也應該做'.first()',否則你只會得到一個遊標。 – connexo

1

max()在您對Mongo的SQL中無法達到預期的效果。 這可能會在將來的版本中發生變化,但截至目前, 最大值,最小值將與索引密鑰一起使用,主要用於 分片。

看到http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

不幸的是,現在得到最大價值的唯一辦法是進行排序該值 收集遞減,並採取第一。

db.collection.find("_id" => x).sort({"test.number" => -1}).limit(1).first() 

轉引自:Getting the highest value of a column in MongoDB

1

拿到鑰匙 「數字」 的最高值,你可以在這裏使用兩種方法。您可以使用aggregation framework,其中管道是這樣的

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": 0, 
      "max_number": { 
       "$max": "$test.number" 
      } 
     } 
    } 
]) 

結果

/* 0 */ 
{ 
    "result" : [ 
     { 
      "_id" : 0, 
      "max_number" : 2 
     } 
    ], 
    "ok" : 1 
} 

,或者您可以使用find()光標非常如下

db.collection.find().sort({"test.number": -1}).limit(1) 
+0

兩者之間的表現是否有差異? – XLordalX

+1

@XLordalX是的。你可以在這裏看到AsyaKamsky的答案:http://stackoverflow.com/a/22122161/3136474 – Dinei

+0

謝謝@ DineiA.Rockenbach的參考,很好的答案和一些很好的解釋。 – chridam