我想从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循环来处理数据,但效率似乎很低。
谢谢。
不胜感激。
答案 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