这些是我在原始文档上运行$ group并使用“$ sum”得到的中间结果:1得到我们存储在属性“value”中的相应计数,如下所示:
{
id: 1,
value: 10
},
{
id: 2,
value: 9
},
{
id: 3,
value: 8
},
{
id: 4,
value: 7
},
{
id: 5,
value: 6
}
在第一阶段,我计算“值”的总和,在第二阶段,我计算“总值”的百分比:
{
"$group": {
"_id": 0,
"ids": { "$push": "$id" },
"values": { "$push": "$value" },
"totalSum": { "$sum": "$value" }
}
},
{
"$project": {
"ids": "$ids",
"values": "$values",
"totalSum": "$totalSum",
"percentages":
{
"$map": {
"input": "$values",
"as": "s",
"in": {
"$multiply":
[{ "$divide": ["$$s", "$totalSum"] }, 100]
}
}
}
}
}
以下是我得到的结果:
[ { _id: 0,
ids: [1,2,3,4,5],
values: [10,9,8,7,6],
totalSum: 40,
percentages: [25,22.5,20,17.5,15]}]
我想在管道中添加另一个阶段,我可以返回累积/运行百分比值达到阈值的结果。例如。如果阈值是50%,我想得到这样的结果:
[{
ids: [1,2],
values: [10,9]
}]
可以减少吗?还是其他任何管道?