在 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 查询
Mongodb 用 $cond 和 $each 聚合 $push