mongodb - 如何在对多个字段 mongodb 聚合进行分组时获得单独的计数?
问题描述
我的候选人收藏中有以下文件。
candidates = [
{
name: "amit",
age: 21,
city: 'pune'
}
{
name: "rahul",
age: 23,
city: 'pune'
},
{
name: "arjun",
age: 21,
city: 'pune'
},
{
name: "rakesh",
age: 23,
city: 'pune'
},
{
name: "amit",
age: 22,
city: 'nashik'
}
]
我想按年龄和城市字段分组,并根据彼此独立的总和计算文档我尝试以下查询
candidate.aggregate([
{$group: {_id: {age: '$age', city: '$city'}, count: {$sum: -1}}}
{$sort: {count: -1}},
{$limit: 10}
])
这让我计算了年龄和城市的综合结果。我想要什么
{
ages: [
{
age: 21,
count: 2
},
{
age: 23,
count: 2
},
{
age: 21,
count: 1
}
],
cities: [
{
city: 'pune',
count: 4
},
{
city: 'nashik',
count: 1
}
]
}
谢谢你的帮助。
解决方案
您需要使用 $facet 舞台,每个年龄一个 $group 舞台,每个城市另一个。这是查询:
db.collection.aggregate([
{
$facet: {
byCity: [
{
$group: {
_id: {
city: "$city"
},
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1
}
},
{
$limit: 10
}
],
byAge: [
{
$group: {
_id: {
age: "$age",
},
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1
}
},
{
$limit: 10
}
]
}
},
])
推荐阅读
- javascript - 以反应原生形式处理键盘的最佳方法是什么?我的一直隐藏/显示并分散注意力
- c# - Generating .NET Core Console App .exe in Visual Studio 2017
- python - 解析yaml文件并获取字典
- python - 向 inception 添加新类
- c# - 在 Visual Studio 中创建 reactjs 应用程序的最简单方法
- javascript - 如何访问父子节点
- mql4 - MQL4 中的正确方法 PUT WebRequest()
- c++ - 为什么在使用转换构造函数编译我的代码时需要 const 复制构造函数?
- c# - 是否有更好的设计来公开您不想直接实现的基本接口?
- python - 在 Python 中使用日期时间以及如何从 Excel 导入