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

MongoDB $ अंतिम एकत्रीकरण पाइपलाइन ऑपरेटर

MongoDB 4.4 ने $last . पेश किया एकत्रीकरण पाइपलाइन ऑपरेटर।

यह ऑपरेटर किसी सरणी में अंतिम तत्व लौटाता है।

उदाहरण

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

{ "_id" : 1, "player" : "Homer", "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "player" : "Marge", "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "player" : "Bart", "scores" : [ 15, 11, 8 ] }

हम देख सकते हैं कि प्रत्येक दस्तावेज़ में एक scores होता है फ़ील्ड जिसमें एक सरणी है।

हम $last . का उपयोग कर सकते हैं उनमें से प्रत्येक सरणी के अंतिम तत्व को वापस करने के लिए।

उदाहरण:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

परिणाम:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }

हम देख सकते हैं कि प्रत्येक दस्तावेज़ के लिए सरणी का अंतिम तत्व लौटा दिया गया था।

यह $arrayElemAt . का उपयोग करने के बराबर है -1 . के मान वाला ऑपरेटर :

db.players.aggregate([
  {
    $project: {
      "firstScore": { $arrayElemAt: [ "$scores", -1 ] }
    }
  }
])

खाली सरणी

यदि आप एक खाली सरणी प्रदान करते हैं, $last कोई मान नहीं लौटाएगा।

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

{ "_id" : 4, "player" : "Farnsworth", "scores" : [ ] }

आइए कोड को फिर से चलाएं:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

परिणाम:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }
{ "_id" : 4 }

इस मामले में, दस्तावेज़ 4 ने सरणी के लिए कोई मान नहीं लौटाया। इसने फ़ील्ड का नाम भी नहीं लौटाया।

शून्य और अनुपलब्ध मान

यदि ऑपरेंड शून्य या अनुपलब्ध है, तो $last रिटर्न null

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

{ "_id" : 5, "player" : "Meg", "scores" : null }

आइए कोड को फिर से चलाएं:

db.players.aggregate([ 
  {
    $project: {
        "lastScore": { 
          $last: "$scores" 
        }
    }
  } 
])

परिणाम:

{ "_id" : 1, "lastScore" : 3 }
{ "_id" : 2, "lastScore" : 18 }
{ "_id" : 3, "lastScore" : 8 }
{ "_id" : 4 }
{ "_id" : 5, "lastScore" : null }

इस बार इसने null . के मान के साथ फ़ील्ड लौटा दी .

अमान्य ऑपरेंड

$last . के लिए संकार्य एक सरणी, अशक्त, या अनुपलब्ध को हल करना चाहिए। अमान्य ऑपरेंड प्रदान करने से त्रुटि होती है।

इसे प्रदर्शित करने के लिए, आइए $last . का उपयोग करने का प्रयास करें player . के विरुद्ध फ़ील्ड (जो एक सरणी नहीं है):

db.players.aggregate([ 
  {
    $project: {
        "lastPlayer": { 
          $last: "$player" 
        }
    }
  } 
])

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$last's argument must be an array, but is string",
	"code" : 28689,
	"codeName" : "Location28689"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

जैसा कि अपेक्षित था, इसने एक त्रुटि लौटा दी।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB समूह और कुंजी के रूप में आईडी के साथ योग

  2. MongoDB में दो संग्रह मर्ज करना

  3. MongoDB:CompositeServerSelector का उपयोग कर सर्वर का चयन करने के बाद 30000ms के बाद एक टाइमआउट हुआ

  4. किसी सरणी में नई वस्तु जोड़ने के लिए MongoDB के $push का उपयोग करते समय ObjectID के साथ _id क्यों जोड़ा जाता है?

  5. MongoDB दस्तावेज़ों और संग्रहों को दृष्टिगत रूप से प्रबंधित करना