Musíte zpracovat $unwind
při práci s poli a musíte to udělat třikrát:
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 }
}}
])
V ideálním případě chcete filtrovat svůj vstup. Možná to uděláte pomocí $match před i po zpracování $unwind a pomocí $regex pro spárování dokumentů, kde data v bodě začínají "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 }
}}
])
Všimněte si, že ve všech případech jsou položky s předponou „dolar $“ „proměnné“ odkazující na vlastnosti dokumentu. Toto jsou "hodnoty" pro použití vstupu na pravé straně. "Klíče" na levé straně musí být zadány jako klíč s jednoduchým řetězcem. K pojmenování klíče nelze použít žádnou proměnnou.