2016-11-13 33 views
0

我開始學習MongoDB,並試圖找到如何在羣組查詢中顯示addtional字段。如何在MongoDB的羣組聚合查詢中顯示其他字段

說我有以下文件,我想找到每個班級學生的最高分數。

{ "_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 } 

我可以這樣做,使用下面的組聚合查詢。

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

我的結果會是這樣,

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

但我失去了誰得到了最大比分的student_id數據。我怎樣才能在我的最終結果中顯示student_id?謝謝。

回答

1

您可以先嚐試排序,然後您可以使用第一個選擇學生ID。

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

樣本輸出:

{ "_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

我試圖找出如何利用$率先拿到了答案。現在我有了更好的理解。謝謝。 – SyncMaster

相關問題