我在一个名为customers的MongoDB集合中有数千个文档,它们都具有相同的模式:
{
"gender" : "male",
"age" : NumberInt(34)
}
{
"gender" : "female",
"age" : NumberInt(56)
}
{
"gender" : "male",
"age" : NumberInt(48)
}
... and so on我想分析所有这些文档,并生成一个基本的人口统计报告,如下所示:

我可以使用$bucket将客户按年龄分组,但我不知道如何将性别整合到我的渠道中。有没有办法使用聚合框架在MongoDB中获得我需要的数据?
发布于 2018-01-09 22:03:39
在$bucket中,您需要编写一个$cond定义来获取男性、女性和总计数
db.g.aggregate([
{
$bucket:
{
groupBy : "$age",
boundaries:[0,20,30,40,50],
default:"other",
output :
{
"total" : {$sum : 1},
"male" : {$sum : {$cond: { if: { $eq: [ "$gender", "male" ] }, then: 1, else: 0 }}},
"female" : {$sum : {$cond: { if: { $eq: [ "$gender", "female" ] }, then: 1, else: 0 }}} }
}
}
])输出
{ "_id" : 30, "total" : 1, "male" : 1, "female" : 0 }
{ "_id" : 40, "total" : 1, "male" : 1, "female" : 0 }
{ "_id" : "other", "total" : 1, "male" : 0, "female" : 1 }https://stackoverflow.com/questions/48169456
复制相似问题