संख्यात्मक कुंजियों वाले ऑब्जेक्ट में मान खोजना
जब ऑब्जेक्ट की कुंजियाँ संख्याएँ हों (जैसे "101", "1001"), तो $where ऑपरेटर का उपयोग करके मान खोजें।
कलेक्शन बनाना
> db.demo268.insertOne(
{
"details": {
"101": "John",
"1001": "Bob"
}
}
);
{ "acknowledged": true, "insertedId": ObjectId("5e4816141627c0c63e7dbaaf") }
डॉक्यूमेंट देखना
> db.demo268.find();
{ "_id": ObjectId("5e4816141627c0c63e7dbaaf"), "details": { "101": "John", "1001": "Bob" } }
$where क्वेरी
> db.demo268.find({ $where:
function() {
for (var k in this.details) {
if (this.details[k] == "Bob") {
return true;
}
}
}
})
परिणाम
{ "_id": ObjectId("5e4816141627c0c63e7dbaaf"), "details": { "101": "John", "1001": "Bob" } }
व्याख्या
- $where: जावास्क्रिप्ट फंक्शन चलाकर कस्टम क्वेरी लॉजिक लागू करता है
- for...in लूप: ऑब्जेक्ट की सभी कुंजियों पर पुनरावृति करता है
- this.details[k]: प्रत्येक कुंजी के मान तक पहुँचता है
- जब मान "Bob" मिलता है, तो true लौटाता है और डॉक्यूमेंट शामिल होता है
सावधानी
$where जावास्क्रिप्ट निष्पादित करता है, जो धीमा हो सकता है और इंडेक्स का उपयोग नहीं करता। बड़े डेटासेट के लिए, स्कीमा डिज़ाइन पर पुनर्विचार करें या $objectToArray (MongoDB 3.6+) जैसे ऑपरेटर्स का उपयोग करें।