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
是否可以对已聚合的计算字段进行数学运算?
我有这样的东西:
([
{
"$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