$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
. का उपयोग करके फ़िल्टर के साथ होता है और डॉट नोटेशन। लेकिन, यह केवल एम्बेडेड (या उप) दस्तावेज़ों के साथ मान्य है नहीं सरणी फ़ील्ड के साथ।
दस्तावेज़ तैयार करें, एग्रीगेशन पाइपलाइन ऑपरेटर्स कहते हैं: