我有一个用户集合,每个文档的结构如下:
{
"_id": "<id>",
"login": "xxx",
"solved": [
{
"problem": "<problemID>",
"points": 10
},
...
]
}
字段solved
可能为空或包含任意多个子文档。我的目标是获取用户列表以及总分数(points
之和),其中尚未解决任何问题的用户将被分配总分数为0。是否有可能使用单个查询(理想情况下使用聚合框架)来实现这一点?
我尝试在聚合框架中使用以下查询:
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$addToSet": { "points": 0 } }
} }
{ "$unwind": "$solved" }
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$sum": "$solved.points" }
} }
然而我遇到了以下错误:
exception: The top-level _id field is the only field currently supported for exclusion
提前感谢您