आपको $unwind
को प्रोसेस करना होगा
सरणियों के साथ काम करते समय, और आपको इसे तीन बार करने की आवश्यकता है:
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 }
}}
])
ध्यान दें कि सभी मामलों में "डॉलर $" उपसर्ग प्रविष्टियां दस्तावेज़ के गुणों का संदर्भ देने वाले "चर" हैं। दाईं ओर इनपुट का उपयोग करने के लिए ये "मान" हैं। बाईं ओर "कुंजी" को एक सादे स्ट्रिंग कुंजी के रूप में निर्दिष्ट किया जाना चाहिए। किसी कुंजी को नाम देने के लिए किसी चर का उपयोग नहीं किया जा सकता है।