2016-11-13 1 views
0

Ich fing an, MongoDB zu lernen, und ich versuche zu finden, wie zusätzliche Felder in der Gruppenabfrage angezeigt werden.So zeigen Sie zusätzliche Felder in MongoDB Gruppenaggregationsabfrage an

Angenommen, ich habe das folgende Dokument und möchte die Höchstpunktzahl eines Schülers in jeder Klasse ermitteln.

{ "_id" : { "class_id" : 1, "student_id" : 40 }, "avgStudentScore" : 62 } 
{ "_id" : { "class_id" : 1, "student_id" : 44 }, "avgStudentScore" : 79 } 
{ "_id" : { "class_id" : 2, "student_id" : 0 }, "avgStudentScore" : 53 } 
{ "_id" : { "class_id" : 2, "student_id" : 24 }, "avgStudentScore" : 60 } 
{ "_id" : { "class_id" : 0, "student_id" : 15 }, "avgStudentScore" : 51 } 
{ "_id" : { "class_id" : 0, "student_id" : 25 }, "avgStudentScore" : 66 } 
{ "_id" : { "class_id" : 0, "student_id" : 30 }, "avgStudentScore" : 32 } 

Ich kann das mit der folgenden Gruppenaggregation Abfrage tun.

{ 
    $group: 
    { 
     "_id" : 
     { 
      "class_id" : "$_id.class_id", 
     }, 
     "maxStudentScore" : 
     { 
      $max : "$avgStudentScore" 
     } 
    } 
} 

Mein Ergebnis wäre so etwas wie,

{ "_id" : { "class_id" : 1 }, "maxStudentScore" : 79 } 
{ "_id" : { "class_id" : 2 }, "maxStudentScore" : 60 } 
{ "_id" : { "class_id" : 0 }, "maxStudentScore" : 66 } 

Aber ich verloren sein, die STUDENT_ID, die die maximale Punktzahl bekam. Wie kann ich die student_id auch in meinem Endergebnis anzeigen? Vielen Dank.

Antwort

1

Sie können versuchen, sortieren, bevor Sie gruppieren, so dass Sie die erste verwenden können, um die Studenten-ID auszuwählen.

aggregate([ { 
    $sort: { 
     "_id.class_id": 1, 
     "avgStudentScore": -1 
    } 
},{ 
    $group: { 
     "_id": { 
      "class_id": "$_id.class_id", 
     }, 
     "student_id": { 
      $first: "$_id.student_id" 
     }, 
     "maxStudentScore": { 
      $max: "$avgStudentScore" 
     } 
    } 
}]) 

Beispielausgabe:

{ "_id" : { "class_id" : 2 }, "student_id" : 24, "maxStudentScore" : 60 } 
{ "_id" : { "class_id" : 1 }, "student_id" : 44, "maxStudentScore" : 79 } 
{ "_id" : { "class_id" : 0 }, "student_id" : 25, "maxStudentScore" : 66 } 
+0

Ich habe versucht, herauszufinden, wie die ersten Gebrauch von $ zu machen, die Antwort zu bekommen. Jetzt habe ich ein besseres Verständnis. Vielen Dank. – SyncMaster

Verwandte Themen