我正在尝试创建一个mongoDB查询,该查询将返回三个不同组中的元素总数。该数据库是关于泰坦尼克号乘客的,其任务是返回未幸存的 18 岁以下总人数,按他们所属的等级分类。我想要的输出应该看起来像这样:
{"_id" : {"Class" : 3, "Survived" : "No", "Total" : 18}}
{"_id" : {"Class" : 2, "Survived" : "No", "Total" : 23}}
{"_id" : {"Class" : 1, "Survived" : "No", "Total" : 12}}
这是我到目前为止所拥有的:
db.passangers.aggregate([
{
"$match": {"Age": {$lt: 18},"Survived": "No"}
},
{
"$group": {
_id: {Class: "$Pclass", Survived: "$Survived"}}
},
{ $count: "Survived"},
{
"$sort": {"Pclass": -1}
}
])
但它似乎只输出:
{"Survived" : 17}
抱歉,如果我没有提供足够的信息,但我会不胜感激!
欢迎来到 SO。查询的问题在于,您在创建组时没有计算每个组中的元素数。因此,当您稍后计算它们时,它会返回 17,这是Pclass
中不同值的数量。以下查询是否是您要查找的内容:
db.passangers.aggregate([
{
"$match": {"Age": {$lt: 18},"Survived": "No"}
},
{
"$group": {
_id: {Class: "$Pclass", Survived: "$Survived"}, Total: {$sum:1}}
},
{
"$sort": {"Pclass": -1}
}
])
您将获得:
{ "_id" : { "Class" : 3, "Survived" : "No" }, "Total" : 18 }
{ "_id" : { "Class" : 2, "Survived" : "No" }, "Total" : 23 }
{ "_id" : { "Class" : 1, "Survived" : "No" }, "Total" : 12 }