我正在尝试使用Mongodb聚合框架计算一些东西。所以我需要在另一种情况下使用投影项(投影阶段的计算字段),但我不能得到结果。
下面是我尝试的代码。
"$project": {
"currency": {"$ifNull": ["$voucher_foreign_amount.symbol", "NOT ENTERED" ]},
"amount": {"$cond": [{"$not": ["$voucher_foreign_amount"]}, "$voucher_amount", "$voucher_foreign_amount.amount"]},
"voucher_type": 1,
"voucher_payment_type": 1,
"voucher_foreign_amount": 1,
"station": 1,
"paid": {"$cond": [{"$eq": ["$voucher_type", "Paid"]}, "$amount", 1]}
}
在这个项目中,我不能得到支付领域,在我看来,这是因为最后一个条件,不承认“$金额”。
那么,我如何在另一个字段生成中使用金额字段?
2条答案
按热度按时间wlwcrazw1#
我们添加的新字段
$project
/$set
=$addFields
仅在阶段完成后存在。我建议的两个解决方案是
1.增加一个
$set
载物台1.做两次计算
你也可以像你一样用2个项目来做,但是我认为只有1个字段的1个
$set
更简单。关于性能,我不知道MongoDB将如何执行它们(我在过去测试过,我认为它优化了它(我测试了多个
$map
)),例如它可能是懒惰的,并且不计算$amount
,除非需要它的值,所以这两个阶段在内部看起来像1。(在这种情况下,第一个会更快)如果它不懒惰,第二个看起来更快。
nbnkbykc2#