使用聚合管道在mongodb中的组内计算百分比。假设我有一个收藏集
[{
"Name":"xyz"
"Area":"London",
"Sex":"Male",
},{
"Name":"abc"
"Area":"Chile",
"Sex":"Female
}...]
我想要每个区域的男性/女性百分比。不是男性/女性总数的百分比。
我们需要按区域分组,将男性/女性/总数相加,并转换为所需的结果。
尝试这个:
db.collection.aggregate([
{
$group: {
_id: "$Area",
total: {
$sum: 1
},
Male: {
$sum: {
$cond: [
{
$eq: [ "$Sex", "Male" ]
},
1,
0
]
}
},
Female: {
$sum: {
$cond: [
{
$eq: [ "$Sex", "Female" ]
},
1,
0
]
}
}
}
},
{
$group: {
_id: null,
area: {
$push: {
k: "$_id",
v: {
Male: {
$multiply: [
{
$divide: [ "$Male", "$total" ]
},
100
]
},
Female: {
$multiply: [
{
$divide: [ "$Female", "$total" ]
},
100
]
}
}
}
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$area"
}
}
}
])