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 :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1
जैसा कि अपेक्षित था, इसने एक त्रुटि लौटा दी।