Anda perlu memproses $unwind
saat bekerja dengan array, dan Anda perlu melakukan ini tiga kali:
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 }
}}
])
Idealnya Anda ingin memfilter masukan Anda. Mungkin lakukan ini dengan $match sebelum dan sesudah $unwind diproses dan menggunakan $regex untuk mencocokkan dokumen di mana data pada titik dimulai dengan "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 }
}}
])
Perhatikan bahwa dalam semua kasus, entri awalan "dollar $" adalah "variabel" yang mengacu pada properti dokumen. Ini adalah "nilai" untuk menggunakan input di sisi kanan. "Kunci" sisi kiri harus ditentukan sebagai kunci string biasa. Tidak ada variabel yang dapat digunakan untuk menamai kunci.