我想計算netDueAmount總和 3 個欄位 = [balanceLoaded operatorDueAmount - walletUsage]。但是這些欄位可以是零,也可以是它們本身(balanceLoaded、operatorDueAmount、walletUsage),具體取決于條件。我想總結應用條件后計算的最終值。是的,我需要從其他欄位中減去 walletUsage。有人可以指導我如何在不更改專案管道中欄位名稱的情況下做到這一點嗎?
const result = await BusDayWise.aggregate(
[
{
$match: { ...filter },
},
{
$project: {
_id: 1,
fromDate: '$fromDate',
busNumber: '$busNumber',
cardDueAmount: '$cardDueAmount',
walletUsage: { $cond: [{ $in: ['digital', dueFieldsConfigs] }, '$walletUsage', 0] },
balanceLoaded: { $cond: [{ $in: ['moneyLoaded', dueFieldsConfigs] }, '$balanceLoaded', 0] },
operatorDueAmount: { $cond: [{ $in: ['contractual', dueFieldsConfigs] }, '$operatorPayout', 0] },
netDueAmount: { $sum: ['$balanceLoaded', '$operatorDueAmount', '$walletUsage'] },
},
},
{ $sort: sort },
{ $skip: skip },
{ $limit: limit },
],
);
uj5u.com熱心網友回復:
您不能在創建它們時參考相同的欄位名稱,最簡單的方法是在初始階段之后添加另一個$project階段:
const result = await BusDayWise.aggregate(
[
{
$match: {...filter}
},
{
$project: {
_id: 1,
fromDate: "$fromDate",
busNumber: "$busNumber",
cardDueAmount: "$cardDueAmount",
walletUsage: { $cond: [ {$in: ["digital", dueFieldsConfigs] }, "$walletUsage", 0 ]},
balanceLoaded: { $cond: [ { $in: ["moneyLoaded", dueFieldsConfigs] }, "$balanceLoaded", 0] },
operatorDueAmount: { $cond: [ { $in: ["contractual", dueFieldsConfigs] }, "$operatorPayout", 0] },
}
},
{
$addFields: {
netDueAmount: { $sum: ["$balanceLoaded", "$operatorDueAmount", "$walletUsage"] },
}
},
{ $sort: sort },
{ $skip: skip },
{ $limit: limit },
]
)
如果出于某種原因你想把它放在同一個階段,你將不得不使用相同的條件來“計算”它們:
const result = await BusDayWise.aggregate(
[
{
$match: { ...filter },
},
{
$project: {
_id: 1,
fromDate: '$fromDate',
busNumber: '$busNumber',
cardDueAmount: '$cardDueAmount',
walletUsage: { $cond: [{ $in: ['digital', dueFieldsConfigs] }, '$walletUsage', 0] },
balanceLoaded: { $cond: [{ $in: ['moneyLoaded', dueFieldsConfigs] }, '$balanceLoaded', 0] },
operatorDueAmount: { $cond: [{ $in: ['contractual', dueFieldsConfigs] }, '$operatorPayout', 0] },
netDueAmount: {
$sum: [
{ $cond: [{ $in: ['digital', dueFieldsConfigs] }, '$walletUsage', 0] },
{ $cond: [{ $in: ['moneyLoaded', dueFieldsConfigs] }, '$balanceLoaded', 0] },
{ $cond: [{ $in: ['contractual', dueFieldsConfigs] }, '$operatorPayout', 0] },
],
},
},
},
{ $sort: sort },
{ $skip: skip },
{ $limit: limit },
],
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/467815.html
