各ドキュメントが次の構造を持つユーザーのコレクションがあります。
{
"_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
前もって感謝します