U moet $unwind
verwerken
wanneer u met arrays werkt, en u moet dit drie keer doen:
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 }
}}
])
Idealiter wilt u uw invoer filteren. Doe dit eventueel met een $match zowel voor als nadat $unwind is verwerkt en met behulp van een $regex om documenten te matchen waarvan de gegevens op het punt beginnen met een "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 }
}}
])
Merk op dat in alle gevallen de voorvoegsels "dollar $" de "variabelen" zijn die verwijzen naar eigenschappen van het document. Dit zijn "waarden" om een invoer aan de rechterkant te gebruiken. De "toetsen" aan de linkerkant moeten worden opgegeven als een gewone tekenreekssleutel. Er kan geen variabele worden gebruikt om een sleutel een naam te geven.