2014-01-06 134 views
0

我在mongodatabase中有以下記錄。在mongodb中使用聚合

> db.student.find() 
{ "_id" : ObjectId("52ca76140e468ba197e50c23"), "name" : "pratik", "subject" : "maths", "marks" : 68 } 
{ "_id" : ObjectId("52ca762b0e468ba197e50c24"), "name" : "pratik", "subject" : "biology", "marks" : 96 } 
{ "_id" : ObjectId("52ca77a90e468ba197e50c25"), "name" : "pratik", "subject" : "maths", "marks" : 40 } 

從這個記錄我想知道只有數學科目獲得的總分數。 這是我嘗試過的,但我不知道在下面的查詢中出了什麼問題。

db.student.aggregate(
{$match: { 'subject': "maths"}}, 
{ $group : { _id :{ name:"$name",subject:"$subject",marks:"$marks" }, 
      total: { $sum : "$marks"}} 
}) 

{ 
     "result" : [ 
       { 
         "_id" : { 
           "name" : "pratik", 
           "subject" : "maths", 
           "marks" : 40 
         }, 
         "total" : 40 
       }, 
       { 
         "_id" : { 
           "name" : "pratik", 
           "subject" : "maths", 
           "marks" : 68 
         }, 
         "total" : 68 
       } 
     ], 
     "ok" : 1 
} 

您能否讓我知道在上述查詢中出了什麼問題以及正確的答案。 也建議我使用聚合模塊的適當指南,以便我可以有效地使用它。我是初學者到mongo數據庫的聚合模塊。

在此先感謝。

回答

1

問題是_id中的組中的marks字段。它會根據標記分數進行分組,然後對您無用,而不是您想要的:

db.student.aggregate(
    {$match: { 'subject': "maths"}}, 
    {$group : { 
     _id :{ name:"$name", subject:"$subject" }, 
     total: { $sum : "$marks"} 
    }} 
); 
+0

這對我很有用。謝謝Sammaye.Could你請建議我使用聚合模塊,以便我可以有效地使用它的適當指南。我是初學者到mongo數據庫的聚合模塊,有點困惑。 – user1961408

+0

@ user1961408一個好的例子通常是郵政編碼的例子:http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/它應該教你大部分東西 – Sammaye