是否有可能计算已经累计的计算字段的数学运算?
我有这样的事情:
([
{
"$unwind" : {
"path" : "$users"
}
},
{
"$match" : {
"users.r" : {
"$exists" : true
}
}
},
{
"$group" : {
"_id" : "$users.r",
"count" : {
"$sum" : 1
}
}
},
])它提供的输出如下:
{ "_id" : "A", "count" : 7 }
{ "_id" : "B", "count" : 49 }现在我想把7除以49,反之亦然。
有可能这样做吗?我试过$project和$divide,但是没有运气。
任何帮助都会很感激的。
谢谢,
发布于 2019-10-19 09:03:23
从你的问题上看,你似乎只假设结果数为2。在这种情况下,我可以假设users.r只能有2个值(除了null)。
我建议的最简单的方法是通过javascript(如果您在mongo控制台中使用它)或在程序中使用它时,使用您使用的语言访问mongo)。
var results = db.collection.aggregate([theAggregatePipelineQuery]).toArray();
print(results[0].count/results[1].count);编辑:,我与上面的方法共享一个替代,因为OP评论了不使用javascript代码的限制,以及只需要通过查询完成。就是这里
([
{ /**your existing aggregation stages that results in two rows as described in the question with a count field **/ },
{ $group: {"_id": 1, firstCount: {$first: "$count"}, lastCount: {$last: "$count"}
},
{ $project: { finalResult: { $divide: ['$firstCount','$lastCount']} } }
])
//The returned document has your answer under `finalResult` fieldhttps://stackoverflow.com/questions/58428523
复制相似问题