这就是我希望我的聚合管道看起来,我只是不知道如何正确地做到这一点
db.Collection.aggregate([
{
$project: {
all_bills: ‘$all_count’,
settled_bills: { $size: ’$settled’ },
overdue_bills: { $size: ‘$overdue’ },
settled_percentage: { $divide: [‘$settled_bills’, ‘$overdue_bills’] }
}
}
])
我想在同一个投影管道上的“settle_percentage”字段中使用“settle_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"}]
}
}
}
])
所以我想我无法在同一投影管道上共存的其他领域使用字段。 (假设settle_bills和overdue_bills不仅包含'size',还包含长查询运算符)
我只会这样做,所以我不会重复$ divide的代码。
db.Collection.aggregate([
{
$project: {
all_bills: ‘$all_count’,
settled_bills: { $size: ’$settled’ },
overdue_bills: { $size: ‘$overdue’ },
},
$project: {
settled_percentage: {
$divide : ['$settled_bills','$overdue_bills']
}
}
}
])