MongoDB में नेस्टेड ऑब्जेक्ट (डिक्शनरी स्ट्रक्चर) में वैल्यू से क्वेरी करना
MongoDB में डिक्शनरी/नेस्टेड ऑब्जेक्ट स्ट्रक्चर के अंदर वैल्यू से डॉक्यूमेंट्स खोजने के लिए डॉट नोटेशन का उपयोग करें।
उदाहरण: नेस्टेड स्ट्रक्चर वाले डॉक्यूमेंट्स बनाना
> db.findInDictionaryDemo.insertOne(
... {
... "_id":101,
... "AllCustomerDetails": {
... "SomeCustomerDetail1": {
... "CustomerName1":"John Doe",
... "CustomerName2":"John Smith"
... },
... "SomeCustomerDetail2": {
... "CustomerName1":"Carol Taylor",
... "CustomerName2":"David Miller"
... }
... }
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }
> db.findInDictionaryDemo.insertOne(
... {
... "_id":102,
... "AllCustomerDetails": {
... "SomeCustomerDetail1": {
... "CustomerName1":"Sam Wiliams",
... "CustomerName2":"Bob Johnson"
... },
... "SomeCustomerDetail2": {
... "CustomerName1":"Chris Brown",
... "CustomerName2":"Mike Wilson"
... }
... }
... }
... );
{ "acknowledged" : true, "insertedId" : 102 }
सभी डॉक्यूमेंट्स देखना
> db.findInDictionaryDemo.find().pretty();
आउटपुट:
{ "_id" : 101, "AllCustomerDetails" : { "SomeCustomerDetail1" : { "CustomerName1" : "John Doe", "CustomerName2" : "John Smith" }, "SomeCustomerDetail2" : { "CustomerName1" : "Carol Taylor", "CustomerName2" : "David Miller" } } }
{ "_id" : 102, "AllCustomerDetails" : { "SomeCustomerDetail1" : { "CustomerName1" : "Sam Wiliams", "CustomerName2" : "Bob Johnson" }, "SomeCustomerDetail2" : { "CustomerName1" : "Chris Brown", "CustomerName2" : "Mike Wilson" } } }
नेस्टेड वैल्यू "Mike Wilson" से डॉक्यूमेंट खोजना
> db.findInDictionaryDemo.find({"AllCustomerDetails.SomeCustomerDetail2.CustomerName2":"Mike Wilson"}).pretty();
आउटपुट:
{ "_id" : 102, "AllCustomerDetails" : { "SomeCustomerDetail1" : { "CustomerName1" : "Sam Wiliams", "CustomerName2" : "Bob Johnson" }, "SomeCustomerDetail2" : { "CustomerName1" : "Chris Brown", "CustomerName2" : "Mike Wilson" } } }
मुख्य बिंदु:
- डॉट नोटेशन (
.) नेस्टेड फील्ड्स तक पहुंचने के लिए - पथ:
AllCustomerDetails.SomeCustomerDetail2.CustomerName2 - कोई विशेष ऑपरेटर नहीं चाहिए, सामान्य क्वेरी सिंटैक्स काम करता है
- इंडेक्स नेस्टेड फील्ड्स पर भी बना सकते हैं
वाइल्डकार्ड खोज (सभी नेस्टेड फील्ड्स में):
db.findInDictionaryDemo.find({ $where: function() {
return JSON.stringify(this.AllCustomerDetails).includes("Mike Wilson");
}});
नोट: $where धीमा है, संभव हो तो डॉट नोटेशन उपयोग करें।