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

मोंगोडीबी $ रेंज

MongoDB में, $range एकत्रीकरण पाइपलाइन ऑपरेटर एक सरणी में संख्याओं का एक उत्पन्न अनुक्रम देता है।

संख्याओं का यह क्रम आपके द्वारा प्रदान किए गए इनपुट मानों पर आधारित है।

सिंटैक्स

वाक्य रचना इस प्रकार है:

{ $range: [ <start>, <end>, <non-zero step> ] }

जहां <start> शुरुआत है और <end> अनुक्रम का अंत है। इनमें से प्रत्येक कोई भी मान्य व्यंजक हो सकता है जो एक पूर्णांक का समाधान करता है।

<non-zero step> एक वैकल्पिक तर्क है जो डिफ़ॉल्ट रूप से 1 है। यह तर्क आपको एक वेतन वृद्धि मान निर्दिष्ट करने की अनुमति देता है। यदि प्रदान किया गया है, तो यह एक मान्य व्यंजक होना चाहिए जो एक गैर-शून्य पूर्णांक का समाधान करता हो।

उदाहरण

मान लीजिए हमारे पास range . नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:

{ "_id" : 1, "start" : 0, "end" : 5 }
{ "_id" : 2, "start" : 1, "end" : 5 }

हम $range . का उपयोग कर सकते हैं ऑपरेटर उन दस्तावेज़ों में मूल्यों के आधार पर एक सरणी वापस करने के लिए।

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            result: { $range: [ "$start", "$end" ] }
          }
     }
   ]
)

परिणाम:

{ "start" : 0, "end" : 5, "result" : [ 0, 1, 2, 3, 4 ] }
{ "start" : 1, "end" : 5, "result" : [ 1, 2, 3, 4 ] }

इस मामले में, हमने तीसरा तर्क प्रदान नहीं किया, और इसलिए $range अपने डिफ़ॉल्ट चरण मान 1 का उपयोग करता है। इसलिए, सरणी तत्व 1 से बढ़ते हैं।

एक स्पष्ट वेतन वृद्धि जोड़ें

हम स्पष्ट रूप से निर्दिष्ट करने के लिए एक तीसरा तर्क जोड़ सकते हैं कि प्रत्येक सरणी तत्व को कितना बढ़ाना चाहिए।

मान लीजिए हमारे संग्रह में निम्नलिखित दस्तावेज हैं:

{ "_id" : 3, "start" : 0, "end" : 5, "step" : 1 }
{ "_id" : 4, "start" : 0, "end" : 10, "step" : 2 }
{ "_id" : 5, "start" : 1, "end" : 10, "step" : 2 }
{ "_id" : 6, "start" : 100, "end" : 150, "step" : 10 }

इन दस्तावेज़ों में एक step है फ़ील्ड, और इसलिए हम संबंधित दस्तावेज़ के लिए बढ़ते मूल्य के लिए उस फ़ील्ड का उपयोग कर सकते हैं।

अब $range लागू करते हैं उन दस्तावेज़ों में, और step . शामिल करें तीसरे तर्क के रूप में फ़ील्ड:

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 3, 4, 5, 6 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            step: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

{ "start" : 0, "end" : 5, "step" : 1, "result" : [ 0, 1, 2, 3, 4 ] }
{ "start" : 0, "end" : 10, "step" : 2, "result" : [ 0, 2, 4, 6, 8 ] }
{ "start" : 1, "end" : 10, "step" : 2, "result" : [ 1, 3, 5, 7, 9 ] }
{ "start" : 100, "end" : 150, "step" : 10, "result" : [ 100, 110, 120, 130, 140 ] }

नकारात्मक चरण मान

चरण एक नकारात्मक मान हो सकता है, हालांकि इसे उच्च start से घटते हुए के संदर्भ में करने की आवश्यकता है कम से कम end संख्या।

आइए हमारे संग्रह में कुछ और दस्तावेज़ जोड़ें:

{ "_id" : 7, "start" : 0, "end" : 5, "step" : -1 }
{ "_id" : 8, "start" : 5, "end" : 0, "step" : -1 }
{ "_id" : 9, "start" : 0, "end" : -5, "step" : -1 }

अब $range लागू करते हैं उन दस्तावेज़ों के लिए:

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 7, 8, 9 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            step: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

{ "start" : 0, "end" : 5, "step" : -1, "result" : [ ] }
{ "start" : 5, "end" : 0, "step" : -1, "result" : [ 5, 4, 3, 2, 1 ] }
{ "start" : 0, "end" : -5, "step" : -1, "result" : [ 0, -1, -2, -3, -4 ] }

हम देख सकते हैं कि पहला दस्तावेज़ एक खाली सरणी लौटाता है क्योंकि ऋणात्मक चरण मान start द्वारा प्रदान की गई सीमा से बाहर है और end फ़ील्ड।

हालांकि, बाद के दस्तावेजों ने मूल्यों की घटती श्रेणी का उत्पादन किया।

जब चरण शून्य हो

चरण मान एक गैर-शून्य पूर्णांक होना चाहिए। 0 . का एक चरण प्रदान करना एक त्रुटि देता है।

मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:

{ "_id" : 10, "start" : 1, "end" : 5, "step" : 0 }

यहां बताया गया है कि जब हम $range लागू करते हैं तो क्या होता है उस दस्तावेज़ के लिए:

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 10 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$range requires a non-zero step value",
	"code" : 34449,
	"codeName" : "Location34449"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

त्रुटि संदेश स्पष्ट रूप से हमें बताता है कि $range requires a non-zero step value

अशक्त चरण

चरण null नहीं हो सकता या तो।

मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:

{ "_id" : 11, "start" : 1, "end" : 5, "step" : null }

और हम $range . लागू करते हैं इसके लिए:

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 11 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$range requires a numeric step value, found value of type:null",
	"code" : 34447,
	"codeName" : "Location34447"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

यह हमें बताता है कि $range requires a numeric step value, found value of type:null

शून्य श्रेणी

अगर start और/या end फ़ील्ड null हैं , तो एक त्रुटि वापस आ जाती है।

मान लीजिए हमारे पास निम्नलिखित दस्तावेज़ हैं:

{ "_id" : 11, "start" : 1, "end" : 5, "step" : null }

और $range apply लागू करें इसके लिए:

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 11 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$range requires a numeric starting value, found value of type: null",
	"code" : 34443,
	"codeName" : "Location34443"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

यह हमें बताता है कि $range requires a numeric starting value, found value of type: null

एक समान संदेश दिखाई देगा यदि अंतिम मान शून्य था।

यहां एक null वाला दस्तावेज़ दिया गया है अंतिम मूल्य:

{ "_id" : 13, "start" : 1, "end" : null, "step" : 1 }

आइए लागू करते हैं $range :

db.range.aggregate(
   [
     { $match: { _id: { $in: [ 13 ] } } },
     {
       $project:
          {
            _id: 0,
            start: 1,
            end: 1,
            result: { $range: [ "$start", "$end", "$step" ] }
          }
     }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$range requires a numeric ending value, found value of type: null",
	"code" : 34445,
	"codeName" : "Location34445"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

इस बार यह हमें बताता है कि $range requires a numeric ending value, found value of type: null


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जोंगो और मोंगोडीबी के साथ जैक्सन अक्रमांकन में ऑब्जेक्ट आईडी _आईडी का नाम बदलें

  2. MongoDB किस स्तर पर लिखता है? (या:प्रति कनेक्शन से इसका क्या मतलब है

  3. MongoDB में अपनी सुविधा संगतता संस्करण कैसे देखें?

  4. एक सरणी के भीतर दस्तावेज़ों को हटाने के लिए MongoDB $pull का उपयोग करना

  5. नोड.जेएस में प्रतिक्रिया व्यक्त करने के लिए एक मोंगोडब कर्सर से स्ट्रीम करें