【发布时间】:2012-12-15 18:37:08
【问题描述】:
我有一个用户集合,其中每个文档具有以下结构:
{
"_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
提前谢谢你
【问题讨论】:
-
当您说“已解决可能为空”时,它是存在且是一个空数组,还是在没有解决问题的情况下不存在?
-
另外,$first login 得到第一个值(按数组的顺序)——这是你想要的,还是你想要的 $min?如果没有解决问题,login是否也可以为null或丢失?
标签: mongodb aggregation-framework