这就是我希望我的聚合管道看起来的样子,我只是不知道如何正确地做到这一点
db.Collection.aggregate([
{
$project: {
all_bills: ‘$all_count’,
settled_bills: { $size: ’$settled’ },
overdue_bills: { $size: ‘$overdue’ },
settled_percentage: { $divide: [‘$settled_bills’, ‘$overdue_bills’] }
}
}
])
我想在同一投影管道上使用“ scaling_percentage ”字段内的“settled_bills”和“overdue_bills”字段。如何?
最佳答案
据我所知,我想你想要 $let
。
您可以创建可在 $let
表达式中使用的局部变量。
试试这个:
db.Collection.aggregate([
{
$project: {
all_bills: ‘$all_count’,
settled_bills: { $size: ’$settled’ },
overdue_bills: { $size: ‘$overdue’ },
settled_percentage: {
$let : {
vars : {
local_settled_bills : { $size : "$settled"},
local_overdue_bills : { $size : "$overdue"}
},
in : {
$divide : ["$$local_settled_bills","$$local_overdue_bills"]
}
}
}
}
}
])
在这里,您在
vars
表达式中创建局部变量,它可以在内部使用(并且只能在 in
表达式内部使用)。我已经创建了 local_settles_bills
和 local_overdue_bills
,它们可以在 in
表达式中使用 $$
作为前缀。我希望这能够帮到你。
有关 $let 的详细信息,请阅读 MongoDb $let documentation。
或者,您也可以这样做:
db.Collection.aggregate([
{
$project: {
all_bills: ‘$all_count’,
settled_bills: { $size: ’$settled’ },
overdue_bills: { $size: ‘$overdue’ },
settled_percentage: {
$divide : [{"$size" : "$settled_bills"},{"$size":"$overdue_bills"}]
}
}
}
])
关于MongoDB 聚合 : $Project (how to use a field on the other field of the same projection pipeline),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55114064/