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

$expr क्वेरी ऑपरेटर सरणी डॉट नोटेशन के साथ काम नहीं कर रहा है

$expr एग्रीगेशन एक्सप्रेशन ऑपरेटरों के उपयोग की अनुमति देता है केवल . आप जिस डॉट नोटेशन का उपयोग कर रहे हैं, वह "values" : [ 1 ] फ़ील्ड के लिए ऐरे एलीमेंट को एक्सेस करने के लिए काम नहीं करेगा। . आपको $arrayElemAt . का उपयोग करने की आवश्यकता है ऑपरेटर, और यह ठीक काम करता है।

आपका कोड find({$expr: {$eq: ["$value1", "$value2"]}}) काम किया, क्योंकि $expr एग्रीगेशन एक्सप्रेशन ऑपरेटर का इस्तेमाल किया $eq , नहीं MongoDB क्वेरी लैंग्वेज (MQL) के ऑपरेटर $eq . ध्यान दें कि दोनों ऑपरेटर एक जैसे दिखते हैं, लेकिन उपयोग और वाक्य रचना अलग है।

और, कोड find({$expr: {$eq: ["$value1", "$values.0"]}}) काम नहीं किया - जैसा कि अपेक्षित था। एग्रीगेशन ऑपरेटर में $values.0 , 0 फ़ील्ड नाम के रूप में व्याख्या की जाती है, न कि किसी सरणी फ़ील्ड की अनुक्रमणिका के रूप में।

डॉट नोटेशन $expr . में ठीक काम करता है भी। नमूना दस्तावेज़ के साथ यहां एक उदाहरण दिया गया है:

{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }

अब $expr . का उपयोग कर रहे हैं और डॉट नोटेशन:

db.test.find({ $expr: { $eq: [ "$val.0", 99 ]  } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ]  } } )

दोनों प्रश्न दस्तावेज़ लौटाते हैं - मिलान $expr . का उपयोग करके फ़िल्टर के साथ होता है और डॉट नोटेशन। लेकिन, यह केवल एम्बेडेड (या उप) दस्तावेज़ों के साथ मान्य है नहीं सरणी फ़ील्ड के साथ।

दस्तावेज़ तैयार करें, एग्रीगेशन पाइपलाइन ऑपरेटर्स कहते हैं:

अभिव्यक्तियाँ :




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्वैगर (सी # के लिए स्वाशबकल) मोंगो ऑब्जेक्ट आईडी को सिंगल स्ट्रिंग के बजाय कई फ़ील्ड के रूप में दिखाता है

  2. MongoDB और PostgreSQL विचार

  3. MongoDB डेटाबेस में सब कुछ हटाएं

  4. mongodb.conf bind_ip =127.0.0.1 काम नहीं करता लेकिन 0.0.0.0 काम करता है

  5. त्रुटि संदेश:MongoError:खराब प्रमाणीकरण URI स्ट्रिंग के माध्यम से विफल रहा