MongoDB एग्रीगेशन में प्रोजेक्शन फील्ड्स वाले सबडॉक्यूमेंट्स फ़िल्टर करना
इसके लिए MongoDB में aggregate() का उपयोग करें।
कलेक्शन बनाना
> db.demo285.insertOne(
{ details: [
{ Name: "Chris" },
{ Name2: "Bob" },
{ Name: "Mike" }
] }
);
{ "acknowledged": true, "insertedId": ObjectId("5e4abffef49383b52759cbb9") }
सभी डॉक्यूमेंट्स
> db.demo285.find();
प्रोजेक्शन फील्ड वाले सबडॉक्यूमेंट्स तक सीमित करने की क्वेरी
> db.demo285.aggregate([ { $match: { 'details.Name': { $exists: 1 } } }, { $unwind: "$details" }, { $match: { 'details.Name': { $exists: 1 } } }, { $project: { Name: "$details.Name", _id: 0 } } ])परिणाम
व्याख्या
- पहला $match: केवल उन्हीं डॉक्यूमेंट्स को पास करता है जिनके details ऐरे में कम से कम एक तत्व में Name फील्ड है
- $unwind: details ऐरे को फैलाता है
- दूसरा $match: केवल उन्हीं अनविंडेड तत्वों को रखता है जिनमें Name फील्ड मौजूद है
- $project: केवल Name फील्ड आउटपुट करता है (details.Name से), _id छुपाता है
परिणाम विश्लेषण
- पहला तत्व: {Name: "Chris"} - Name मौजूद है → शामिल
- दूसरा तत्व: {Name2: "Bob"} - Name नहीं है → बाहर
- तीसरा तत्व: {Name: "Mike"} - Name मौजूद है → शामिल
उपयोग के मामले
विभिन्न स्कीमा वाले पॉलीमॉर्फिक ऐरे से विशिष्ट संरचना वाले तत्वों को निकालना।