MongoDB $divide 总产出

MongoDB $divide on aggregate output

是否可以对已聚合的计算字段进行数学运算?

我有这样的东西:

([
        {
                "$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 但没有成功。

如有任何帮助,我们将不胜感激。

谢谢,

从你的问题来看,你似乎假设结果计数仅为 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` field