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

एम्बेडेड दस्तावेज़ की तुलना mongoDB के साथ मूल फ़ील्ड से करें

मानक क्वेरीज़ दस्तावेज़ों में मानों की "तुलना" नहीं कर सकतीं। यह वास्तव में ऐसा कुछ है जो आप .aggregate() . का उपयोग करके करते हैं और $redact :

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$gt": [
          { "$size": {
            "$filter": {
              "input": "$offers",
              "as": "o",
              "cond": { "$eq": [ "$$o.amount", "$amount" ] }
            }
          }},
          0
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

यहां हम $filter का इस्तेमाल करते हैं "amount" . के मानों की तुलना करने के लिए मूल दस्तावेज़ में सरणी के भीतर उन लोगों के लिए। अगर कम से कम एक "बराबर" है तो हम "$$KEEP" दस्तावेज़, अन्यथा हम "$$PRUNE"

हाल के संस्करणों में, हम $indexOfArray

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$ne": [
          { "$indexOfArray": [ "$offers.amount", "$amount" ] },
          -1
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

यदि आप वास्तव में केवल "मिलान करने वाले सरणी तत्व" भी चाहते थे, तो आप एक $filter प्रक्षेपण में:

db.collection.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$gt": [
          { "$size": {
            "$filter": {
              "input": "$offers",
              "as": "o",
              "cond": { "$eq": [ "$$o.amount", "$amount" ] }
            }
          }},
          0
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }},
  { "$project": {
    "amount": 1,
    "offers": {
      "$filter": {
        "input": "$offers",
        "as": "o",
        "cond": { "$eq": [ "$$o.amount", "$amount" ] }
      }
    }
  }}
])

लेकिन मुख्य सिद्धांत निश्चित रूप से केवल . पर लौटाए गए दस्तावेज़ों की संख्या को "कम" करना है वे जो वास्तव में "पहली" प्राथमिकता के रूप में स्थिति से मेल खाते हैं। अन्यथा आप केवल अनावश्यक गणना और काम कर रहे हैं जिसमें समय और संसाधन लग रहे हैं, जिसके परिणाम आप बाद में छोड़ देंगे।

इसलिए पहले "फ़िल्टर" करें, और प्राथमिकता के रूप में दूसरा "रिशेप" करें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी जावा - नेस्टेड ऐरे को धक्का दे रहा है?

  2. मैं एक डेटाबेस को एक MongoDB सर्वर से दूसरे में कैसे कॉपी करूं?

  3. MongoDB वर्तमान उपयोगकर्ता दिखाएं

  4. MongoDB में संग्रह कैसे छोड़ें या हटाएं?

  5. उल्का मोंगोडब के साथ रोबोमोंगो कनेक्शन