MongoDB聚合查询求和

时间:2016-01-22 05:53:02

标签: mongodb

我有一个如下的集合

{ "_id" : 0, "name" : "aimee Zank", "scores" : 
 [ 
   { "type" : "exam", "score" : 1.463179736705023 }, 
   { "type" : "quiz", "score" : 11.78273309957772 }, 
   { "type" : "homework", "score" : 6.676176060654615} 
 ] }

{"_id" : 1, "name" : "Aurelia Menendez", "scores" : 
[ 
 { "type" : "exam", "score" : 60.06045071030959 }, 
 { "type" : "quiz", "score" : 52.79790691903873 }, 
 { "type" : "homework", "score" : 71.761334391544 } 
] }

{"_id" : 2, "name" : "Corliss Zuk", "scores" : 
[ 
 { "type" : "exam", "score" : 67.03077096065002 }, 
 { "type" : "quiz", "score" : 6.301851677835235 }, 
 { "type" : "homework", "score" : 20.18160621941858} 
] }

现在我想要各个学生的每种类型的所有分数的总和 例如,对于学生aimee zank,我想要考试+测验和家庭作业的分数总和。

我试过这个

 db.collection.aggregate(
 [
  {
   $group:
     {
       _id: "$name",
       total: { $sum: "$scores.score" },
     }
 }
 ]
 )

和这个

 db.scores.aggregate(
 [
   { $project: { name: 1, total: { $add: [ "$scores.score" ] } } }
 ] 
 )

但我找不到解决方案 有人可以帮我查询一下吗?

1 个答案:

答案 0 :(得分:1)

在stackoverflow上找不到任何帮助并且只是阻止了群组中的人之后,我自己找到了一个解决方案,这只是我搜索的解决方案的一部分:

db.scores.aggregate(
[

 { $unwind : "$scores"},
  { $group:
     {
       _id: "$name",
       total: { $sum: "$scores.score" }
     }
 }

]
)