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

क्या एकत्र करते समय MongoDB में $cond में कोई अन्य चीज़ है

आधुनिक रिलीज़ के साथ (MongoDB 3.4 के बाद से) आप $switch का उपयोग करेंगे , जो मूल रूप से स्विच . का समकक्ष है या केस अन्य भाषा कार्यान्वयन में कीवर्ड:

db.items.aggregate([
  { "$project": {
    "name": 1,
    "customfield": {
      "$switch": {
        "branches": [
          { "case": { "$eq": [ "$field1", "4" ] }, "then": 30 },
          { "case": { "$eq": [ "$field1", "8" ] }, "then": 25 }
        ],
        "default": 10
      }
    }
  }},
  { "$sort": { customfield: 1 }},
  { "$limit":12 }
])

यह घोंसले के शिकार . से बचा जाता है अगर..तो..और शर्तों को $cond और नीचे दिखाया गया है। लेकिन नीचे अभी भी एक उदाहरण के रूप में दिखाता है कि यह हमेशा स्पष्ट if..then..else के नए ऑपरेटर से पहले भी किया जा सकता है। मूल सरणी संकेतन के बाद से कीवर्ड हमेशा उस सिंटैक्स को बनाए रखते हैं।

यह भी ध्यान दें कि एक सरणी नेस्टेड . बनाने की तुलना में यहां शर्तों का आमतौर पर प्रोग्राम के रूप में निर्माण करना बहुत आसान है विवरण के लिए डेटा संरचना जैसा कि $cond

अगर..तो..और $cond के कीवर्ड लेखन के समय MongoDB के हाल के संस्करणों के रूप में ऑपरेटर केवल हाल ही में जोड़े गए हैं ( MongoDB 2.6 कीवर्ड का परिचय था . वास्तविक ऑपरेटर MongoDB 2.2 में एकत्रीकरण ढांचे को जारी करने के साथ उपलब्ध था)। इरादा स्पष्टता के लिए था लेकिन इस मामले में ऐसा लगता है कि कुछ भ्रम पैदा हुआ है।

एक if..then.else . के रूप में ऑपरेटर $cond वास्तव में एक टर्नरी है ऑपरेटर, जैसा कि कई प्रोग्रामिंग भाषाओं में लागू किया जाएगा। इसका अर्थ है "इनलाइन" सशर्त, शर्तों के तर्क के "ब्लॉक" बनाने के बजाय, जो कुछ भी पहली शर्त को पूरा नहीं करता है वह else के अंतर्गत आता है ।

इसलिए आप ब्लॉक का पालन करने के बजाय बयानों को "घोंसला" करते हैं:

db.items.aggregate([
  { "$project": {
    "name": 1,
    "customfield": {
      "$cond": { 
        "if": { "$eq": [ "$field1", "4" ] }, 
        "then": 30,
        "else": {
          "$cond": {
            "if": { "$eq": ["$field1","8"]}, 
            "then": 25, 
            "else": 10
          }
        }
      }
    }
  }},
  { "$sort": { customfield: 1 }},
  { "$limit":12 }
]);

या मूल सरणी . के साथ भी संकेतन, जिसे कुछ लोग प्रोग्राम के रूप में कथन बनाते समय पसंद कर सकते हैं:

db.items.aggregate([
  { "$project": {
    "name": 1,
    "customfield": {
      "$cond": [
         { "$eq": [ "$field1", "4" ] }, 
         30,
         { "$cond": [
           { "$eq": ["$field1","8"] },
           25, 
           10
         ]}
      ]
    }
  }},
  { "$sort": { customfield: 1 }},
  { "$limit":12 }
]);

टर्नरी का अर्थ है तीन शर्तें, न अधिक न कम। तो सभी if..then..else तर्क नेस्टेड होना चाहिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB 2dsphere अनुक्रमणिका विफल (विकृत ज्यामिति?)

  2. हरोकू कस्टम डोमेन काम नहीं कर रहा

  3. MongoDB कई सरणियों को खोल देता है

  4. मोंगोडब का उपयोग करके किसी इकाई में स्थान को कैसे परिभाषित करें?

  5. MEAN स्टैक:किसी फ़ंक्शन के परिणाम को डेटाबेस में कैसे अपडेट करें?

© कॉपीराइट http://hi.sqldat.com सर्वाधिकार सुरक्षित