mongoDBオブジェクトのネストが多く、指定された条件に一致するサブ文書の数を数えたい編集:(各文書内)。たとえば:MongoDBネストされたオブジェクトの集計数量
{"_id":{"chr":"20","pos":"14371","ref":"A","alt":"G"},
"studies":[
{
"study_id":"Study1",
"samples":[
{
"sample_id":"NA00001",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"NA00002",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14372","ref":"T","alt":"AA"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE1",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE2",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14373","ref":"C","alt":"A"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE3",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE7",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
私が含まれているどのように多くのサブ文書を知りたいGT:「1 | 0」、第3回の最初の文書中の1、および第二の2、および0になり、この場合、これ。私はunwindと集約関数を試しましたが、私は明らかに何か正しいことをしていません。私は「GT」フィールドで、サブ文書をカウントしようとすると、モンゴは文句を言う:「」私のグループの名前以来
db.collection.aggregate([{$group: {"$studies.samples.formatdata.GT":1,_id:0}}])
を含めることはできません、まだ私はそれらを残している場合:
db.collection.aggregate([{$group: {"$GT":1,_id:0}}])
それ"$ GTはオペレータ名にはなれない"ため文句を言う
アイデアはありますか?
はい、これは機能しますが、実際にはドキュメントの代わりにコレクション内のすべての値がカウントされます。私が探しているのは、0がある場合を含め、各文書のサブ文書を数えることに相当します。これをより明確にするためにオリジナルの投稿を編集します。 –
@StevenHartそれはあなたの質問ではっきりしていませんでした。しかし、文書IDをグループ化キーに含めるのは簡単なことです。変更を参照してください。 –
$ unwindsの後に2番目の$一致が必要ですか? – TheGaff