MongoDB में $elemMatch और $not के साथ सरणी तत्वों की सटीक मिलान
जब आपको उन डॉक्यूमेंट्स को ढूंढना हो जहां सरणी के सभी तत्व एक विशिष्ट मान से मेल खाते हों, तो आप $not के साथ $elemMatch का संयोजन उपयोग कर सकते हैं। तर्क: "ऐसा कोई तत्व नहीं मौजूद है जो दिए गए मान से अलग हो"।
नमूना डेटा
> db.demo15.insertOne({"Details": [{"Score": 56}, {"Score": 78}]});
{ "acknowledged": true, "insertedId": ObjectId("5e0f7806d7df943a7cec4fab") }
> db.demo15.insertOne({"Details": [{"Score": 86}, {"Score": 86}]});
{ "acknowledged": true, "insertedId": ObjectId("5e0f7817d7df943a7cec4fac") }
> db.demo15.insertOne({"Details": [{"Score": 97}, {"Score": 85}]});
{ "acknowledged": true, "insertedId": ObjectId("5e0f7823d7df943a7cec4fad") }
क्वेरी: जहां सरणी के सभी Score 86 हों
हम $exists के साथ सुनिश्चित करते हैं कि फ़ील्ड मौजूद है, फिर $not + $elemMatch का उपयोग करके उन डॉक्यूमेंट्स को बाहर करते हैं जहां कोई Score 86 से अलग हो।
> db.demo15.find({
"Details.Score": { $exists: true },
"Details": {
$not: {
$elemMatch: {
"Score": { $ne: 86 }
}
}
}
});
परिणाम
{ "_id": ObjectId("5e0f7817d7df943a7cec4fac"), "Details": [ { "Score": 86 }, { "Score": 86 } ] }
केवल दूसरा डॉक्यूमेंट वापस किया गया क्योंकि इसकी सरणी में सभी तत्वों का Score 86 है। पहला डॉक्यूमेंट (56, 78) और तीसरा (97, 85) बाहर हो गए क्योंकि उनमें कम से कम एक तत्व 86 से अलग है।