删除重复 ($addToSet) mongoose 聚合后如何对数据求和
Posted
技术标签:
【中文标题】删除重复 ($addToSet) mongoose 聚合后如何对数据求和【英文标题】:How to sum data after remove duplicate ($addToSet) mongoose aggregate 【发布时间】:2021-05-24 15:23:52 【问题描述】:删除猫鼬中的重复项后,我很难对价值求和。我有这样的数据:
"_id": "6006c7f624d9e1364051b0aa",
"paidFrom": "5fec1b5d124c58c6ddacfd02",
"amount": 234,
,
"_id": "600e63f2545087cbddfe370a",
"paidFrom": "5fec1b5d124c58c6ddacfd02",
"amount": 25000,
,
"_id": "600e7c16545087cbddfe370b",
"paidFrom": "5ff56473609e930518cb7b67",
"amount": 5000,
,
我想使用聚合删除重复数据,我想用相同的支付值求和。
这是我的代码:
const dataAP = await AccountPayment.aggregate([
$match: filterDate
,
$group:
_id: null,
paidFrom:
"$addToSet" : "$paidFrom",
,
amount: $sum: "$amount"
,
],
function (err, res)
if (err)
console.log(err)
);
但该代码给了我结果:
"status": "success",
"data": [
"_id": null,
"paidFrom": [
"5ff56473609e930518cb7b67",
"5fec1b5d124c58c6ddacfd02",
"5ff54212609e930518cb7b65"
],
"amount": 60234
]
我的预期结果是:
"status": "success",
"data": [
"_id": null,
"paidFrom": [
"5ff56473609e930518cb7b67",
],
"amount": 20000
,
"_id": null,
"paidFrom": [
"5fec1b5d124c58c6ddacfd02",
],
"amount": 20000
,
"_id": null,
"paidFrom": [
"5ff54212609e930518cb7b65",
],
"amount": 20234
,
]
我希望金额是重复值的总和,所以我可以计算重复值。有人可以告诉我有什么问题吗?谢谢
【问题讨论】:
为什么paidFrom
需要是一个数组?如果我正确理解了这个问题,它总是只有一项。
【参考方案1】:
您只需按paidFrom
id 和 sum 数量进行分组,它将对重复的文档和总和 amount
进行分组
const dataAP = await AccountPayment.aggregate([
$match: filterDate ,
$group:
_id: "$paidFrom",
amount: $sum: "$amount"
],
function (err, res)
if (err) console.log(err);
)
Playground
【讨论】:
以上是关于删除重复 ($addToSet) mongoose 聚合后如何对数据求和的主要内容,如果未能解决你的问题,请参考以下文章
在对象数组上使用 Mongoose / MongoDB $addToSet 功能
如何使用带有 Mongoose 的 addToSet 添加多个 ObjectId?