MongoDB$按总产出划分

MongoDB$按总产出划分,mongodb,mongodb-query,aggregate,divide,Mongodb,Mongodb Query,Aggregate,Divide,是否有可能在已聚合的计算字段上计算数学运算 我有这样的想法: ([ { "$unwind" : { "path" : "$users" } }, { "$match" : { "users.r" : {

是否有可能在已聚合的计算字段上计算数学运算

我有这样的想法:

([
        {
                "$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控制台中使用它)或在progam中使用它,使用您用来访问mongo的语言)来完成这个算法

编辑:我分享了上述方法的另一种选择,因为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

从您的问题来看,您似乎假设结果计数仅为2。在这种情况下,我可以假设
users.r
只能有2个值(除了null)

我建议的最简单的方法是通过javascript(如果您在mongo控制台中使用它)或在progam中使用它,使用您用来访问mongo的语言)来完成这个算法

编辑:我分享了上述方法的另一种选择,因为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

如果字段
A
B
是固定的,那么可以通过
$project
轻松完成,否则您必须将
$group
的结果(在查询结束时使用
.toArray()
)捕获到一个变量中,然后通过循环和创建一个新对象来创建结果。嗨@Viksool,实际上我是MongoDB的新手,你能帮我处理$project这件事吗?是的,这两个字段都是固定的。如果字段
A
B
是固定的,那么
$project
就可以很容易地完成,否则你必须捕获
$group
的结果(在查询结束时使用
.toArray()
)输入一个变量,然后通过循环和创建一个新对象来创建结果。您好@Viksool,实际上我是MongoDB的新手,您能帮我处理$project这个问题吗?是的,这两个字段都是固定的。@sunyb希望这个答案对您有所帮助。如果有,请向上投票并接受为答案(在答案一侧打勾)。这将有助于其他SO读者。是的,这是真的。。它将像这样工作,但我希望在MongoDB图表中使用它。所以我需要一个聚合语句。在这种情况下,您可以使用
$divide
获得结果。您可以通过使用另一个组函数和使用
$first
$last
在一个文档中同时获取
计数
值。如果要我编写查询,请共享要测试的示例文档。@sunnyb我已更新了“编辑”部分下的答案“签出详细信息”。我希望这有帮助,希望这有用。@sunyb希望这个答案对你有帮助。如果有,请向上投票并接受为答案(在答案一侧打勾)。这将有助于其他SO读者。是的,这是真的。。它将像这样工作,但我希望在MongoDB图表中使用它。所以我需要一个聚合语句。在这种情况下,您可以使用
$divide
获得结果。您可以通过使用另一个组函数和使用
$first
$last
在一个文档中同时获取
计数
值。如果要我编写查询,请共享要测试的示例文档。@sunnyb我已更新了“编辑”部分下的答案“签出详细信息”。我希望这有帮助,希望这能起作用。