आधुनिक रिलीज़ के साथ (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
तर्क नेस्टेड होना चाहिए।