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我已更新了“编辑”部分下的答案“签出详细信息”。我希望这有帮助,希望这能起作用。