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
जैसा कि अपेक्षित था, इसने एक त्रुटि लौटा दी।