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

MongoDB:इनपुट दस्तावेज़ चर के साथ मिलान का उपयोग करना

<ब्लॉकक्वॉट>

क्या इसका मतलब यह है कि यदि आप $lookuppipeline में इनपुट चर का उपयोग कर रहे हैं तो आपको $expr

का उपयोग करना होगा

हाँ सही है, डिफ़ॉल्ट रूप से फ़िल्टर में अर्थात; .find() . के फ़िल्टर भाग में या $match . में एकत्रीकरण चरण आप दस्तावेज़ में किसी मौजूदा फ़ील्ड का उपयोग नहीं कर सकते हैं।

यदि आपको अपने क्वेरी फ़िल्टर में मौजूदा फ़ील्ड के मान का उपयोग करने की आवश्यकता है तो आपको एग्रीगेशन पाइपलाइन का उपयोग करने की आवश्यकता है, इसलिए .find() में एग्रीगेशन पाइपलाइन का उपयोग करने के लिए या $match . में आपको अपनी फ़िल्टर क्वेरी को $expr से लपेटने की आवश्यकता है। स्थानीय चरों तक पहुँचने का एक ही तरीका let . का उपयोग करके बनाया गया है $lookup . का $match . में फ़िल्टर करें $expr . द्वारा लपेटने की आवश्यकता है ।

आइए नीचे दिए गए उदाहरण पर विचार करें:

नमूना दस्तावेज़ :

[
  {
    "key": 1,
    "value": 2
  },
  {
    "key": 2,
    "value": 4
  },
  {
    "key": 5,
    "value": 5
  }
]

प्रश्न:

 db.collection.find({ key: { $gt: 1 }, value: { $gt: 4 } })

    Or

 db.collection.aggregate([ { $match: { key: { $gt: 1 }, value: { $gt: 4 } } } ])

परीक्षा : मोंगोप्लेग्राउंड

यदि आप उपरोक्त क्वेरी देखते हैं तो दोनों इनपुट 1 और 4 क्वेरी में पास कर दिए जाते हैं, लेकिन यह आप नीचे दी गई क्वेरी की जांच करते हैं जहां आप key . से मिलान करने का प्रयास करते हैं फ़ील्ड ==value फ़ील्ड - यह काम नहीं करता :

db.collection.aggregate([ { $match: { key: { $eq: "$value" } } } ])

परीक्षा : मोंगोप्लेग्राउंड

ऊपर जैसा कि आप दो मौजूदा क्षेत्रों की तुलना कर रहे हैं तो आप ऐसा नहीं कर सकते क्योंकि इसका मतलब है कि आप key वाले दस्तावेज़ों की जांच कर रहे हैं स्ट्रिंग के रूप में फ़ील्ड मान "$value" . तो कहने के लिए कि यह एक स्ट्रिंग नहीं है, यह वास्तव में value . का संदर्भ है फ़ील्ड आपको नीचे दिए गए $eq क्वेरी ऑपरेटर के बजाय $eq एग्रीगेशन ऑपरेटर का उपयोग करने की आवश्यकता है:

 db.collection.aggregate([ { $match: { $expr: { $eq: [ "$key", "$value" ] } } } ])

परीक्षा : मोंगोप्लेग्राउंड



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $setEquals

  2. मैं उबंटू पर मोंगोड सर्वर चलाने की कोशिश करता हूं:initAndListen में अपवाद:2 9 डेटा निर्देशिका/डेटा/डीबी नहीं मिला।, समाप्त हो रहा है

  3. MongoDB और जुड़ता है

  4. क्या mongoDB ने मुद्दों को फिर से जोड़ा है या क्या मैं इसे गलत कर रहा हूं?

  5. मोंगोडब (घंटों में) में टाइमस्टैम्प अंतर की गणना कैसे करें?