$unwind
を処理する必要があります
配列を操作する場合、これを3回行う必要があります:
db.collection.aggregate([
// Un-wind the array's to access filtering
{ "$unwind": "$studies" },
{ "$unwind": "$studies.samples" },
{ "$unwind": "$studies.samples.formdata" },
// Group results to obtain the matched count per key
{ "$group": {
"_id": "$studies.samples.formdata.GT",
"count": { "$sum": 1 }
}}
])
理想的には、入力をフィルタリングする必要があります。おそらく、 $match を使用してこれを行います。 $ unwindが処理される前と後の両方で、 $regex> ポイントのデータが「1」で始まるドキュメントと照合します。
db.collection.aggregate([
// Match first to exclude documents where this is not present in any array member
{ "$match": { "studies.samples.formdata.GT": /^1/ } },
// Un-wind the array's to access filtering
{ "$unwind": "$studies" },
{ "$unwind": "$studies.samples" },
{ "$unwind": "$studies.samples.formdata" },
// Match to filter
{ "$match": { "studies.samples.formdata.GT": /^1/ } },
// Group results to obtain the matched count per key
{ "$group": {
"_id": {
"_id": "$_id",
"key": "$studies.samples.formdata.GT"
},
"count": { "$sum": 1 }
}}
])
すべての場合において、「ドル$」の接頭辞付きエントリは、ドキュメントのプロパティを参照する「変数」であることに注意してください。これらは、右側の入力を使用するための「値」です。左側の「キー」は、プレーンな文字列キーとして指定する必要があります。キーに名前を付けるために変数を使用することはできません。