MongoDB执行$ reduce,直到达到标准

时间:2018-04-14 09:44:20

标签: mongodb mongoose aggregation-framework

这些是我在原始文档上运行$ 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]
}]

可以减少吗?还是其他任何管道?

0 个答案:

没有答案