如何使用猫鼬聚合函数根据每个评级计算评分计数?我有以下集合:
[
{
"ProjectName":"AAA",
"Emp":[
{
"Emp":{
"EmpID":"1",
"Rating":2.5
}
},
{
"Emp":{
"EmpID":"2",
"Rating":2
}
},
{
"Emp":{
"EmpID":"2",
"Rating":2.5
}
}
]
},
{
"ProjectName":"BBB",
"Emp":[
{
"Emp":{
"EmpID":"1",
"Rating":3
}
},
{
"Emp":{
"EmpID":"1",
"Rating":4
}
},
{
"Emp":{
"EmpID":"2",
"Rating":4
}
}
]
},
{
..
}
我期待以下回复:
[{
"projectName":"AAA",
"Rating":[
{
"Rate":0.5,
"Count":0
},
{
"Rate":1,
"Count":0,
"Percentage":0
},
{
"Rate":1.5,
"Count":0
},
{
"Rate":2,
"Count":0
},
{
"Rate":2.5,
"Count":0
},
{
"Rate":3,
"Count":1
},
{
"Rate":3.5,
"Count":0
},
{
"Rate":4,
"Count":2
},
{
"Rate":4.5,
"Count":0
},
{
"Rate":5,
"Count":0
}
]
},
{
"projectName":"BBB",
"Rating":[
{
"Rate":0.5,
"Count":0
},
{
"Rate":1,
"Count":0,
"Percentage":0
},
{
"Rate":1.5,
"Count":0
},
{
"Rate":2,
"Count":1
},
{
"Rate":2.5,
"Count":2
},
{
"Rate":3,
"Count":0
},
{
"Rate":3.5,
"Count":0
},
{
"Rate":4,
"Count":0
},
{
"Rate":4.5,
"Count":0
},
{
"Rate":5,
"Count":0
}
]
},{...}]
我能解决这个问题吗?
答案 0 :(得分:0)
使用以下聚合管道:
var pipeline = [
{ "$unwind": "$Emp" },
{
"$group": {
"_id": {
"projectName": "$ProjectName",
"rate": "$Emp.Emp.Rating"
},
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": "$_id.projectName",
"Rating": {
"$push": {
"Rate": "$_id.rate",
"Count": "$count"
}
}
}
},
{
"$project": {
"_id": 0, "projectName": "$_id", "Rating": 1
}
}
];
Model.aggregate(pipeline, function(err, result) {
if (err) { /* handle error */ };
console.log(JSON.stringify(result));
});