如何使用猫鼬从mongodb集合文档中计算字段总和

时间:2018-06-21 06:38:55

标签: javascript node.js mongodb mongoose

我想从mongodb文档中计算员工积分。

我在员工积分集中的文档如下

[
    {
        "EmployeeID": "Cust0001",
        "Point": 1,
    },
    {
        "EmployeeID": "Cust0002",
        "Point": 2,
    },
    {
        "EmployeeID": "Cust0003",
        "Point": 1,
    },
    {
        "EmployeeID": "Cust0001",
        "Point": 5,
    },
    {
        "EmployeeID": "Cust0001",
        "Point": 2,
    }
]

预期结果

[
    {
        "EmployeeID": "Cust0001",
        "Total_Points": 8
    },
    {
        "EmployeeID": "Cust0002",
        "Total_Points": 2
    },
    {
        "EmployeeID": "Cust0003",
        "Total_Points": 1
    }
]

这是从mongodb获得总点数的最佳,最优化的方法。

我在项目中使用mongoose mongodb连接。

我可以使用for循环来处理数据,但效率似乎很低。

谢谢。

不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要在这里使用两次$sum ...一个作为$group阶段的“累加器”,另一个作为Points的求和

db.collection.aggregate([
  { "$group": {
    "_id": "$EmployeeID",
    "Point": {
      "$sum": {
        "$sum": "$Point"
      }
    }
  }},
  { "$project": {
    "EmployeeID": "$_id",
    "Point": "$Point",
    "_id": 0
  }}
])

输出

[
  {
    "EmployeeID": "Cust0003",
    "Point": 1
  },
  {
    "EmployeeID": "Cust0002",
    "Point": 2
  },
  {
    "EmployeeID": "Cust0001",
    "Point": 8
  }
]

检查here