2016-05-06 8 views
0

Ich habe einige Dokumente in einer Sammlung wieMongo Abfrage Top-Wert für einige eindeutigen Schlüssel

{ "age" : 22, "value" : 234 }, 
{ "age" : 23, "value" : 54 }, 
{ "age" : 22, "value" : 260 }, 
{ "age" : 22, "value" : 23 } 

Hier haben wir unterschiedliches Alter und Werte zu finden. Ich muss den höchsten Wert für jedes Alter auswählen. Also sollte das Ergebnis so sein.

{ "age" : 23, "value" : 54 } 
{ "age" : 22, "value" : 260 } 

Antwort

0

Die folgende aggregation Abfrage sollte es tun:

db.collection.aggregate([ 
    {$group: {_id: "$age", value: {$max: "$value"}}}, 
    {$project: {_id: 0, age: "$_id", value: 1}} 
]) 
+0

Wie kann ich das mit find() verwenden? –

+0

Sie können nicht, wie finden nur zum Filtern/Projekt Dokumente verwendet werden. Die von Ihnen angeforderte Funktionalität ist in Aggregation verfügbar. – ZeMoon

0

Sie benötigen Dokument von „Alter“ $group und verwenden Sie den $max Speicher Bediener das Maximum für jede Gruppe zurückzukehren.

db.people.aggregate([ 
    { "$group": { 
     "_id": "$age", 
     "value": { "$max": "$value" } 
    }} 
]) 

Welche produziert:

{ "_id" : 23, "value" : 54 } 
{ "_id" : 22, "value" : 260 } 

Beachten Sie, dass Sie benötigen, um eine weitere $project Stufe in die Pipeline in anderen hinzufügen, um Ihre genaue Ausgabe zu erhalten, aber dies wird einen Rückgang der Leistung führen.

+0

Wie kann ich das mit find() verwenden? –

+0

@RahulTailwal können Sie einfach nicht. Dies ist kein Job für '.find()' – styvane