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

मोंगोडीबी:$elemMatch और $ के बीच क्या अंतर है और सरणी के अंदर वस्तुओं को खोजने के लिए क्या है?

मैं इसे एक उदाहरण के साथ समझाऊंगा। संग्रह पर विचार करें arrays . इसमें arr . नामक एक फ़ील्ड है जो एम्बेडेड दस्तावेज़ों की एक सरणी . है (फ़ील्ड के साथ a और b )।

arrays में कुछ दस्तावेज़ संग्रह:

{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

मैं सरणी एम्बेडेड-दस्तावेज़ फ़ील्ड के साथ सभी दस्तावेज़ ढूंढना चाहता हूं a="a1" और b="b1" . ध्यान दें कि यह सरणी के एम्बेडेड-दस्तावेज़ के समान तत्व के भीतर होना चाहिए। मैं $elemMatch . का उपयोग करता हूं इसके लिए और वांछित परिणाम प्राप्त करें।

> db.arrays.find( { arr: { $elemMatch: { a: "a1", b: "b1" } } } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }

अब, अगर मैं $और . का उपयोग करता हूं निम्नलिखित क्वेरी में ऑपरेटर की तरह, परिणाम सही नहीं हैं। जैसा कि आप देख सकते हैं एक अतिरिक्त दस्तावेज़ चुना गया है। क्वेरी एम्बेडेड-दस्तावेज़ फ़ील्ड के साथ काम करती है a="a1" या b="b1" .

> db.arrays.find({$and: [ { "arr.a": "a1" }, { "arr.b": "b1" } ] } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 4, "arr" : [ { "a" : "a1", "b" : "b91" }, { "a" : "a29", "b" : "b1" } ] }

तो, $and . का उपयोग करके ऑपरेटर इस उद्देश्य के लिए अभिप्रेत नहीं है (यानी, उप-दस्तावेजों की एक सरणी के कई क्षेत्रों पर क्वेरी करना)।

साथ ही, किसी सरणी एम्बेडेड-दस्तावेज़ फ़ील्ड पर क्वेरी करने के लिए (केवल एक फ़ील्ड ) $elemMatch आवश्यक नहीं है, उदाहरण के लिए:

> db.arrays.find( { "arr.a": "a2" } )
==>
{ "_id" : 1, "arr" : [ { "a" : "a1", "b" : "b1" }, { "a" : "a2", "b" : "b2" } ] }
{ "_id" : 2, "arr" : [ { "a" : "a1", "b" : "b11" }, { "a" : "a2", "b" : "b22" } ] }
{ "_id" : 3, "arr" : [ { "a" : "a2", "b" : "b1" }, { "a" : "a", "b" : "b1" } ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. अपने व्यवसाय के लिए सर्वश्रेष्ठ MongoDB होस्टिंग कैसे चुनें?

  2. चयन_संबंधित () का उपयोग करने के बाद मोंगोइंजिन डिफरेंसिंग होता है

  3. MongoDB में किसी सरणी से मान निकालने के 3 तरीके

  4. अजीब एक्सेसर्स के साथ एनोटेशन का उपयोग नहीं करते समय मोंगोडब हैश संबंधित सरणी मैपिंग लोड करने का उचित तरीका

  5. मोंगोडब सरणी मानों को कैसे अपडेट करें