在 mongoose 聚合中修改 $cond 的结果值?

Posted

技术标签:

【中文标题】在 mongoose 聚合中修改 $cond 的结果值?【英文标题】:modifiy the result value of $cond even more in mongoose aggregate? 【发布时间】:2021-12-16 03:56:31 【问题描述】:

我在我的订单集合上实现了一个聚合,我在其中计算了一个这样的 driverDebt 字段,

 driverDebt: 
      $sum: 
        $cond: [
          
            $in: ["$status", ["driverHasPaid", "paid"]],
          ,
          0,
          "$driverDebt",
        ],
      ,
    ,

如果满足我想要的条件,我想要做的是从“$driverDebt”中减去另一个值,例如像这样(它错了):

driverDebt: 
      $sum: 
        $cond: [
          
            $in: ["$status", ["driverHasPaid", "paid"]],
          ,
          0,
           $sum:  $cond: [ $eq: ["$deliveryFeeCollected", "no"] , $subtract: ["$driverDebt", "$deliveryPrice"], "$driverDebt"] 
         ,,
        ],
      ,
    ,

所以基本上我想检查是否没有收取deliveryFee,从driverDebt中扣除相当于deliveryPrice的价格。我可以在聚合结果上运行一个循环并在那里进行数学运算,但我想在聚合中实现它。希望它足够清楚,可以理解。 谢谢,

【问题讨论】:

【参考方案1】:

查询 我不确定你是否想要这个,但确实如此:

if("$status" in ["driverHasPaid", "paid"]) driverDept=$driverDept
else if("$deliveryFeeCollected"="no") driverDept= "$driverDept"-"$deliveryPrice"
else driverDept = "$driverDept";
aggregate(
["$set": 
   "driverDept": 
     "$cond": 
       ["$in": ["$status", ["driverHasPaid", "paid"]], "$driverDept",
        "$cond": 
          ["$eq": ["$deliveryFeeCollected", "no"],
           "$subtract": ["$driverDebt", "$deliveryPrice"],
           "$driverDept"]]])

如果这不是您需要的,如果您像伪代码一样提供给我们,它将有很大帮助。

【讨论】:

感谢您的回答,我的问题是我不知道您可以将其他运算符用作 $cond 的子代,所以我只是替换了您的 $cond 部分并对其进行了一些修改。是的,那是我的问题。

以上是关于在 mongoose 聚合中修改 $cond 的结果值?的主要内容,如果未能解决你的问题,请参考以下文章

Mongo / Mongoose 聚合 - $redact 和 $cond 问题

修改对象中的日期以在 mongoose 中进行聚合 $match 查询

聚合框架中的 rmongodb $cond

Mongodb 用 $cond 和 $each 聚合 $push

带有 $cond 的 MongoDB 聚合管道 $addFields - 无法使用变量

if else if cond in mongodb 聚合