我在mongodatabase中有以下记录。
> 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数据库聚合模块的初学者。
先谢谢。
答案 0 :(得分:1)
问题是marks
内组中的_id
字段。它会对标记分数进行分组,然后对你没用,而不是你想要的:
db.student.aggregate(
{$match: { 'subject': "maths"}},
{$group : {
_id :{ name:"$name", subject:"$subject" },
total: { $sum : "$marks"}
}}
);