这就是我希望我的聚合管道看起来的样子,我只是不知道如何正确地做到这一点

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_billslocal_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/

10-12 06:32