javascript - 删除重复 ($addToSet) mongoose 聚合后如何对数据求和
问题描述
删除猫鼬中的重复项后,我很难对价值求和。我有这样的数据:
{
"_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
要按 id 和 sum 数量进行分组,它将对重复的文档和总和进行分组amount
const dataAP = await AccountPayment.aggregate([
{ $match: filterDate },
{
$group: {
_id: "$paidFrom",
amount: { $sum: "$amount" }
}
}
],
function (err, res) {
if (err) console.log(err);
})
推荐阅读
- c++ - 用于非基于零的数组指针分配的 C++ gcc 扩展?
- node.js - 使用 NodeJS 从 Google Cloud Storage Bucket 下载文件夹
- prestashop - 我在 prestashop 1.7.5.1 的后台有问题
- javascript - NullInjectorError:在Angular 2中测试时的StaticInjectorError(DynamicTestModule)
- java - Firebase 连接问题
- visual-studio-code - eslint 正在运行但未显示任何 lint 错误/警告
- ruby - 这个红宝石片段有什么作用?
- angular6 - 如何在Angular 6(反应形式)中的文本框内输入时读取文本框的值
- javascript - 如何通过 JavaScript 使用定制的 OpenSSL 调用 REST API?
- php - 显示带有分类图像的顶级 Woocommerce 产品标签