首页 > 解决方案 > 删除重复 ($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
        },
    ]


}

我想要金额是重复值的总和,所以我可以计算重复值。有人可以告诉我有什么问题吗?谢谢

标签: javascriptnode.jsmongooseaggregate

解决方案


您只需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);
})

操场


推荐阅读