ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान
शिक्षार्थी ऐरे की सामग्री के आधार पर दस्तावेज़ों को फ़िल्टर करेंगे, बहु-तत्व मिलान के लिए $all और लंबाई जाँचने के लिए $size का उपयोग करेंगे।
ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान, CoddyKit पर MongoDB Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह MongoDB Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Array को प्रथम-श्रेणी नागरिक के रूप में उपयोग करना
MongoDB में array एक देशज BSON प्रकार है जिसे सीधे किसी दस्तावेज़ फ़ील्ड में संग्रहित किया जा सकता है। रिलेशनल डेटाबेस के विपरीत, जहाँ array के लिए अलग जंक्शन तालिका चाहिए होती है, MongoDB आपको किसी भी प्रकार के array—स्केलर, उप-दस्तावेज़ या मिश्रित—को सीधे दस्तावेज़ में एम्बेड करने देता है। इससे array सबसे उपयोगी सुविधाओं में से एक बन जाते हैं, लेकिन उन्हें सही ढंग से क्वेरी करना कुछ जटिल भी होता है।
// Documents with array fields
db.products.insertMany([
{ name: 'Laptop', tags: ['electronics', 'computers', 'portable'] },
{ name: 'Mouse', tags: ['electronics', 'peripherals'] },
{ name: 'Book', tags: ['education', 'reading'] }
]);सरल Array समानता क्वेरी
किसी array फ़ील्ड पर लगाया गया सरल समानता फ़िल्टर यह जाँचता है कि array में निर्दिष्ट मान एक तत्व के रूप में मौजूद है या नहीं। आपको किसी विशेष ऑपरेटर की आवश्यकता नहीं है—फ़िल्टर ऐसे लिखें जैसे फ़ील्ड कोई स्केलर हो। MongoDB ऐसे किसी भी दस्तावेज़ से मेल करेगा जिसमें array के भीतर कहीं भी वह सटीक मान मौजूद हो।
// Find products tagged 'electronics'
// MongoDB checks if 'electronics' is an element of the tags array
db.products.find({ tags: 'electronics' });
// Returns Laptop and Mouse (both have 'electronics' in tags)
// This also works on arrays of numbers
db.scores.find({ values: 95 });
// Matches { values: [80, 95, 72] }$all ऑपरेटर
$all ऑपरेटर उन दस्तावेज़ों से मेल खाता है जिनमें ऐरे में निर्दिष्ट सभी मान, किसी भी क्रम में, मौजूद होते हैं। साधारण समानता जाँच के विपरीत (जो केवल एक तत्व से मेल खाती है), $all यह सुनिश्चित करता है कि निर्दिष्ट प्रत्येक तत्व मौजूद हो। इसे ऐरे की सदस्यता पर लागू की गई कई AND शर्तों के रूप में समझें।
// Find products tagged BOTH 'electronics' AND 'portable'
db.products.find({
tags: { $all: ['electronics', 'portable'] }
});
// Returns Laptop (has both tags)
// Does NOT return Mouse (missing 'portable')
// Order of values in $all does not matter
db.products.find({
tags: { $all: ['portable', 'electronics'] } // same result
});$size ऑपरेटर
$size ऑपरेटर उन दस्तावेज़ों से मेल खाता है जिनमें ऐरे फ़ील्ड में निर्दिष्ट संख्या में ही तत्व होते हैं। यह एक शाब्दिक पूर्णांक स्वीकार करता है—आप सीधे $size के साथ $gt जैसी सीमा-तुलनाओं का उपयोग नहीं कर सकते। लंबाई की सीमा-आधारित जाँच के लिए, ऐरे के साथ उसकी लंबाई रखने वाला फ़ील्ड उपयोग करें या $where के साथ एग्रीगेशन का उपयोग करें।
// Find products with exactly 3 tags
db.products.find({ tags: { $size: 3 } });
// Returns Laptop (tags has 3 elements)
// $size does NOT support ranges:
// db.products.find({ tags: { $size: { $gt: 2 } } }); // INVALID
// Workaround: store the count as a field
db.products.updateMany({}, [{ $set: { tagCount: { $size: '$tags' } } }]);
db.products.find({ tagCount: { $gt: 2 } }); // range check on stored countऐरे इंडेक्स के आधार पर मिलान
आप डॉट नोटेशन और इंडेक्स संख्या का उपयोग करके ऐरे में किसी विशिष्ट स्थिति के आधार पर क्वेरी कर सकते हैं। उदाहरण के लिए, { 'scores.0': 100 } उन दस्तावेज़ों से मेल खाता है जिनमें scores ऐरे का पहला तत्व 100 है। यह तब उपयोगी होता है जब ऐरे का क्रम महत्वपूर्ण हो, जैसे रैंक की गई सूची या समय-क्रम में व्यवस्थित अनुक्रम।
// Documents: { name: 'Alice', scores: [100, 85, 92] }
// { name: 'Bob', scores: [75, 88, 91] }
// Find documents where the FIRST score is 100
db.results.find({ 'scores.0': 100 });
// Returns Alice
// Find where SECOND element is greater than 85
db.results.find({ 'scores.1': { $gt: 85 } });
// Returns Bob (scores[1] = 88 > 85) and Alice (85 is NOT > 85)फैले हुए फ़ील्ड की समस्या
एक सूक्ष्म समस्या यह है कि जब आप अलग-अलग फ़ील्ड पर कई शर्तों के साथ उप-दस्तावेज़ों के ऐरे को फ़िल्टर करते हैं, तो MongoDB प्रत्येक शर्त को ऐरे के सभी तत्वों पर स्वतंत्र रूप से लागू करता है—किसी एक ही तत्व पर नहीं। इसे फैले हुए फ़ील्ड की समस्या कहा जाता है। उदाहरण के लिए, { 'scores.value': { $gt: 90 }, 'scores.grade': 'A' } तब मेल खाता है जब किसी भी तत्व का मान > 90 हो और किसी भी तत्व का ग्रेड 'A' हो—दोनों का एक ही तत्व में होना आवश्यक नहीं है।
// Documents:
// { scores: [{ value: 95, grade: 'A' }, { value: 60, grade: 'D' }] }
// { scores: [{ value: 92, grade: 'B' }, { value: 72, grade: 'C' }] }
// This filter has SPREAD FIELD issue:
// Matches doc1 (value 95>90 is in scores[0], grade 'A' is in scores[0] - fine here)
// Also matches doc2 if value 92>90 from one element + some 'B'... but what if:
// { scores: [{ value: 91, grade: 'B' }, { value: 62, grade: 'A' }] }
// This would ALSO match! 91 > 90 from element[0] + grade 'A' from element[1]बहु-शर्तीय ऐरे क्वेरी के लिए $elemMatch
$elemMatch क्वेरी ऑपरेटर सभी शर्तों को एक ही ऐरे तत्व से पूरा करवाकर फैले हुए फ़ील्ड की समस्या हल करता है। अपनी शर्तों को { $elemMatch: { condition1, condition2 } } में रखें और MongoDB केवल वे दस्तावेज़ लौटाएगा जिनमें कम-से-कम एक ऐरे तत्व सभी निर्दिष्ट शर्तों को एक साथ पूरा करता हो।
// Find documents where a SINGLE scores element has value > 90 AND grade 'A'
db.results.find({
scores: {
$elemMatch: {
value: { $gt: 90 },
grade: 'A'
}
}
});
// Only matches if one element has BOTH value > 90 AND grade 'A'स्केलर ऐरे के लिए $elemMatch
$elemMatch को स्केलर मानों (स्ट्रिंग और संख्याओं) वाले ऐरे पर भी लागू किया जा सकता है, जब आपको एक ही तत्व पर कई ऑपरेटर लागू करने हों। उदाहरण के लिए, ऐसे तत्व ढूँढना जो 10 से बड़े और 20 से छोटे दोनों हों—$elemMatch के बिना, इन शर्तों को दो अलग-अलग तत्व पूरा कर सकते थे।
// Find docs where a SINGLE element is between 10 and 20
db.measurements.find({
values: { $elemMatch: { $gt: 10, $lt: 20 } }
});
// { values: [5, 15, 25] } - matches (15 satisfies both)
// { values: [5, 30] } - does NOT match
// Without $elemMatch (wrong - tests across elements):
db.measurements.find({ values: { $gt: 10, $lt: 20 } });
// { values: [5, 30] } WOULD match! (5 < 20, 30 > 10, different elements)$all और $elemMatch का संयोजन
कई अलग-अलग ऐरे तत्वों पर कई जटिल शर्तें लागू करने के लिए आप $all के अंदर $elemMatch एक्सप्रेशन का उपयोग कर सकते हैं। $all के अंदर मौजूद प्रत्येक $elemMatch को अलग तत्व से पूरा होना चाहिए। इस पैटर्न की आवश्यकता बहुत कम पड़ती है, लेकिन जटिल बहु-शर्तीय और बहु-तत्वीय आवश्यकताओं के लिए यह उपलब्ध है।
// Find docs where:
// - one element satisfies { value: { $gt: 90 }, grade: 'A' }
// - AND another element satisfies { value: { $lt: 70 }, grade: 'D' }
db.results.find({
scores: {
$all: [
{ $elemMatch: { value: { $gt: 90 }, grade: 'A' } },
{ $elemMatch: { value: { $lt: 70 }, grade: 'D' } }
]
}
});ऐरे और इंडेक्स का व्यवहार
ऐरे फ़ील्ड पर बनाया गया इंडेक्स MongoDB में अपने-आप मल्टीकी इंडेक्स बन जाता है और ऐरे के प्रत्येक तत्व के लिए एक इंडेक्स प्रविष्टि रखता है। इसलिए { tags: 'electronics' } और { tags: { $all: ['electronics', 'portable'] } } जैसी दोनों क्वेरी इंडेक्स से लाभ उठाती हैं। हालांकि, किसी एक दस्तावेज़ में कंपाउंड इंडेक्स एक से अधिक ऐरे फ़ील्ड पर मल्टीकी नहीं हो सकता—ऐसा करने का प्रयास त्रुटि उत्पन्न करता है।
// Index on tags field becomes multikey automatically
db.products.createIndex({ tags: 1 });
// These queries all use the multikey index efficiently:
db.products.find({ tags: 'electronics' });
db.products.find({ tags: { $all: ['electronics', 'portable'] } });
db.products.find({ tags: { $size: 3 } });
// Note: $size cannot use the index for size filtering
// (it still needs to check document-level array length)ऐरे क्वेरी के साथ explain() का उपयोग
$all और $elemMatch वाली ऐरे क्वेरी कभी-कभी इंडेक्स के उपयोग को लेकर आपको चौंका सकती हैं। हमेशा explain('executionStats') से जाँच करें। $size फ़िल्टर मल्टीकी इंडेक्स पर IXSCAN दिखाएगा, लेकिन फिर भी सभी इंडेक्स प्रविष्टियों की जाँच करेगा, क्योंकि आकार इंडेक्स में संग्रहीत नहीं होता। इंडेक्स किए गए फ़ील्ड पर $elemMatch मेल खाने वाली तत्व-शर्तों के लिए IXSCAN का उपयोग करेगा।
// Check how array queries use indexes
db.products.find({
tags: { $all: ['electronics', 'portable'] }
}).explain('executionStats');
// Look for:
// stage: 'IXSCAN' - index is being used
// totalKeysExamined vs nReturned ratioत्वरित जाँच
MongoDB में ऐरे क्वेरी ऑपरेटरों की अपनी समझ जाँचें।
पाठ का सारांश
इस पाठ में आपने सीखा कि $all के लिए ऐरे में सभी निर्दिष्ट मानों का होना आवश्यक है, $size सटीक संख्या में तत्वों वाले ऐरे से मेल खाता है, और $elemMatch यह सुनिश्चित करता है कि कई शर्तें एक ही ऐरे तत्व पर लागू हों, जिससे फैले हुए फ़ील्ड की समस्या हल होती है। अब हम ऐरे के उप-दस्तावेज़ों से मिलान करने के लिए $elemMatch को और गहराई से समझेंगे।
एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान” पाठ निःशुल्क है?
हाँ—“ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और MongoDB Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान” में मैं क्या सीखूँगा?
शिक्षार्थी ऐरे की सामग्री के आधार पर दस्तावेज़ों को फ़िल्टर करेंगे, बहु-तत्व मिलान के लिए $all और लंबाई जाँचने के लिए $size का उपयोग करेंगे। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ MongoDB Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या MongoDB Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर MongoDB Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस MongoDB Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर MongoDB Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- ऐरे पर क्वेरी: $all, $size और एलिमेंट मिलान
- $elemMatch: ऐरे के उप-दस्तावेज़ों का मिलान
- ऐरे अपडेट करना: $push, $pull, $pop, $addToSet
- स्थितीय और फ़िल्टर किए गए स्थितीय अपडेट