Jor*_*sen 1 mongodb aggregation-framework
我有这个文件:
{gender:"male", ...},
{gender:"male", ...},
{gender:"female", ...},
{gender:"female", ...},
{gender:"female", ...},
Run Code Online (Sandbox Code Playgroud)
所以,我需要像
{
total:5,
male:2,
female:3
}
Run Code Online (Sandbox Code Playgroud)
我的实际查询(没有工作):
db.collection.aggregate([
{
$match:{...}
},
{
$group:{
_id:"$_id",
gender:{
$push:"$gender"
},
total:{
$sum:1
}
}
},
{
$unwind:"$gender"
},
{
$group:{
_id:"$gender",
name:{
$addToSet:"$all"
},
"count":{
$sum:1
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
我如何能够追溯性别和总数?谢谢
这样的事情会起到作用:
db.collection.aggregate([
{$project: {
male: {$cond: [{$eq: ["$gender", "male"]}, 1, 0]},
female: {$cond: [{$eq: ["$gender", "female"]}, 1, 0]},
}},
{$group: { _id: null, male: {$sum: "$male"},
female: {$sum: "$female"},
total: {$sum: 1},
}},
])
Run Code Online (Sandbox Code Playgroud)
根据你的例子制作:
{ "_id" : null, "male" : 2, "female" : 3, "total" : 5 }
Run Code Online (Sandbox Code Playgroud)
关键的想法是使用条件表达式将性别映射到0或1.之后,您需要的只是每个字段的简单总和.
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |