MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

उप-दस्तावेज़ के कई क्षेत्रों पर मोंगो क्वेरी

यह वास्तव में $elemMatch ऑपरेटर के लिए है, भले ही इसका अक्सर दुरुपयोग किया जाता है। यह अनिवार्य रूप से सरणी के "भीतर" प्रत्येक तत्व पर क्वेरी शर्तों को निष्पादित करता है। सभी MongoDB तर्क एक "और" ऑपरेशन हैं जब तक कि स्पष्ट रूप से अन्यथा नहीं कहा जाता है:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

आप शायद यहां भी "प्रोजेक्ट" करना चाहते हैं यदि आप केवल मेल खाने वाले फ़ील्ड की अपेक्षा कर रहे हैं और पूरे दस्तावेज़ की नहीं:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

अंत में यह समझाने के लिए कि आपका दूसरा प्रयास क्यों काम नहीं करता, यह प्रश्न:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

किसी भी चीज़ से मेल नहीं खाता क्योंकि ऐसा कोई वास्तविक दस्तावेज़ नहीं है जहाँ "arr" में आपकी शर्तों से बिल्कुल मेल खाने वाला एकवचन तत्व हो।

आपका पहला उदाहरण विफल..:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

क्योंकि कई सरणी तत्व हैं जो शर्तों को पूरा करते हैं और यह केवल यह नहीं माना जाता है कि दोनों शर्तें एक ही तत्व पर लागू होती हैं। यही है $elemMatch जोड़ता है, और जब आपको मिलान करने के लिए उस एक शर्त से अधिक की आवश्यकता होती है, तो यह वह जगह है जहां आप इसका उपयोग करते हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB अलग-अलग क्वेरी प्लान अलग-अलग nReturned मान क्यों दिखाते हैं?

  2. MongoDB में एक बहु-भाषा टेक्स्ट इंडेक्स बनाएं

  3. MongoId ऑब्जेक्ट्स की सरणी को स्ट्रिंग्स की सरणी में कनवर्ट करें

  4. मैं विकास के साथ उत्पादन उल्का जेएस डेटाबेस को कैसे सिंक्रनाइज़ कर सकता हूं?

  5. मोंगो कंसोल में दिनांक फ़ील्ड कैसे अपडेट करें?