【问题标题】:modifiy the result value of $cond even more in mongoose aggregate?在 mongoose 聚合中修改 $cond 的结果值?
【发布时间】: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的价格。我可以在聚合结果上运行一个循环并在那里进行数学运算,但我想在聚合中实现它。希望它足够清楚,可以理解。 谢谢,

【问题讨论】:

    标签: node.js mongodb express mongoose aggregate


    【解决方案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 部分并对其进行了一些修改。是的,那是我的问题。
    猜你喜欢
    • 2020-06-21
    • 2017-05-23
    • 2023-03-17
    • 2017-10-12
    • 2019-05-31
    • 2021-03-30
    • 2014-02-19
    • 2014-12-24
    • 2017-04-26
    相关资源
    最近更新 更多