MongoDB执行$reduce直到满足条件
这些是我在原始文档上运行$group并使用“$sum”:1获取存储在属性“value”中的相应计数的中间结果,如图所示:MongoDB执行$reduce直到满足条件,mongodb,mongoose,aggregation-framework,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: 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]
}]
可以用reduce吗?或者任何其他管道?它的用法与其他地方的任何其他高阶函数几乎相同。这意味着输出累加器基本上有
$$value
,每个数组项都有$$this
。所以你不能像以前那样“打破循环”。也许你可以通过举例说明你真正想做什么。嘿,刚刚编辑了这个问题。希望它更有意义。根据你的回答,虽然我认为不可能,但我认为你需要更清楚地解释自己。向我们展示一些样本数据和您期望得到的结果。甚至不清楚您为什么需要(或认为需要)$reduce
。人们通常认为他们需要$reduce
而其他东西实际上已经起到了作用。在您尝试在评论中向我们展示之前,请使用您问题的链接。在评论中发布代码会导致糟糕的阅读。你的问题是你要问的内容的主体需要在哪里。我不打算发布任何代码,但我已经用一个例子编辑了这个问题。希望这能提供足够的清晰度。谢谢