【发布时间】:2020-06-24 05:44:25
【问题描述】:
类似的问题被问过多次,但我找不到像我这样的问题的答案。
我的数据如下所示:
{ _id: 1, status: 'unpaid', subtotal: 5000, total: 4750, fees: 250 },
{ _id: 2, status: 'received', subtotal: 5000, total: 4750, fees: 250 },
{ _id: 3, status: 'paidout', subtotal: 5000, total: 4750, fees: 250 },
{ _id: <id>, status: 'paidout', subtotal: 5000, total: 4750, fees: 250 },
{ _id: <id>, status: 'unpaid', subtotal: 5000, total: 4750, fees: 250 }
我想要实现的是,我想为所有按状态分组的记录获得total 的总和,如果状态为paidout,那么总和将为subtotal,也是最新记录状态为paidout。
这是我现在的代码:
const totals = await Payment.aggregate([
{
$match: {
_user: req.user._id,
}
},
{
$group: {
_id: '$status',
total: {
$sum: '$subtotal',
},
paidout: {
$sum: '$total'
},
lastPayout: {
$first: '$total'
}
}
}
])
这是返回的结果:
[{ _id: 'paidout', total: 102000, paidout: 97962, lastPayout: 52825 },
{ _id: 'received', total: 60000, paidout: 57630, lastPayout: 57630 }]
不是我正在寻找的格式,因此非常感谢任何帮助!
【问题讨论】:
-
你想要
status: 'paidout'也分组status字段并求和subtotal或total的最新记录吗?latest record是什么意思?status字段是否会不时更新?那你怎么说一个文件是最新的?有时间戳吗?
标签: mongodb mongoose mongodb-query aggregation-framework