MongoDB में $not और $gt के साथ ऐरे एलिमेंट्स को फ़िल्टर करना
उन डॉक्यूमेंट्स को खोजने के लिए जहां एक ऐरे में सभी** एलिमेंट्स एक शर्त को पूरा करते हैं (उदाहरण के लिए, सभी स्कोर ≤ 45), $not के साथ $gt का उपयोग करके किसी भी एलिमेंट के उल्लंघन को बाहर करें।
नमूना डेटा बनाना
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[89,43,32,45]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9e9f9b50a6c6dd317adb3") }
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[32,33,34,40]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea13b50a6c6dd317adb4") }
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[45,56,66,69]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea25b50a6c6dd317adb5") }
> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[46,66,77,88]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea3cb50a6c6dd317adb6") }
सभी डॉक्यूमेंट्स देखना
> db.arrayElementsNotGreaterThanDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd9e9f9b50a6c6dd317adb3"), "Scores" : [ 89, 43, 32, 45 ] }
{ "_id" : ObjectId("5cd9ea13b50a6c6dd317adb4"), "Scores" : [ 32, 33, 34, 40 ] }
{ "_id" : ObjectId("5cd9ea25b50a6c6dd317adb5"), "Scores" : [ 45, 56, 66, 69 ] }
{ "_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"), "Scores" : [ 46, 66, 77, 88 ] }
क्वेरी: सभी स्कोर ≤ 45 (यानी, कोई भी स्कोर > 45 नहीं)
> db.arrayElementsNotGreaterThanDemo.find({ Scores: { $not: { $gt: 45 } } });
आउटपुट:
{ "_id" : ObjectId("5cd9ea13b50a6c6dd317adb4"), "Scores" : [ 32, 33, 34, 40 ] }
व्याख्या
{ $gt: 45 }- किसी भी एलिमेंट से मेल खाता है जो 45 से बड़ा है।$not- मिलान को नकारता है: उन डॉक्यूमेंट्स को चुनता है जहां कोई भी एलिमेंट 45 से बड़ा नहीं है।- परिणाम: केवल दूसरा डॉक्यूमेंट योग्य है (सभी स्कोर 32, 33, 34, 40 ≤ 45 हैं)।
वैकल्पिक दृष्टिकोण: $elemMatch के साथ $not
ऑब्जेक्ट्स के ऐरे के लिए, एक ही एलिमेंट पर मल्टीपल शर्तों को लागू करने के लिए $elemMatch का उपयोग करें। सरल ऐरे के लिए, ऊपर दिखाया गया $not: { $gt: ... } पैटर्न मानक है।
सामान्य पैटर्न: "सभी एलिमेंट्स शर्त को पूरा करते हैं"
| शर्त | क्वेरी पैटर्न |
|---|---|
| सभी एलिमेंट्स > 10 | { arr: { $not: { $lte: 10 } } } |
| सभी एलिमेंट्स ≤ 100 | { arr: { $not: { $gt: 100 } } } |
| सभी एलिमेंट्स 5 और 10 के बीच | { arr: { $not: { $or: [ { $lt: 5 }, { $gt: 10 } ] } } } |
| कोई एलिमेंट null नहीं | { arr: { $not: { $in: [null] } } } |
मुख्य बिंदु
$not: { $gt: value }पैटर्न "सभी एलिमेंट्स ≤ value" को लागू करता है।- सरल मान ऐरे के लिए काम करता है (ऑब्जेक्ट्स के लिए नहीं)।
- ऐरे फील्ड पर इंडेक्स इस क्वेरी पैटर्न का समर्थन कर सकते हैं।