MongoDB 4.4 představil $last
provozovatel agregačního potrubí.
Tento operátor vrací poslední prvek v poli.
Příklad
Předpokládejme, že máme kolekci nazvanou hráči s následujícími dokumenty:
{ "_id" :1, "player" :"Homer", "skóre" :[ 1, 5, 3 ] }{ "_id" :2, "player" :"Marge", "skóre" :[ 8, 17, 18 ] }{ "_id" :3, "player" :"Bart", "scores" :[ 15, 11, 8 ] }
Vidíme, že každý dokument má scores
pole, které obsahuje pole.
Můžeme použít $last
vrátit poslední prvek každého z těchto polí.
Příklad:
db.players.aggregate([
{
$project: {
"lastScore": {
$last: "$scores"
}
}
}
])
Výsledek:
{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }
Vidíme, že pro každý dokument byl vrácen poslední prvek pole.
Toto je ekvivalent použití $arrayElemAt
operátor s hodnotou -1
:
db.players.aggregate([
{
$project: {
"firstScore": { $arrayElemAt: [ "$scores", -1 ] }
}
}
])
Prázdná pole
Pokud zadáte prázdné pole, $last
nevrátí hodnotu.
Předpokládejme, že do naší sbírky vložíme následující dokument:
{ "_id" :4, "player" :"Farnsworth", "scores" :[ ] }
Spusťte kód znovu:
db.players.aggregate([
{
$project: {
"lastScore": {
$last: "$scores"
}
}
}
])
Výsledek:
{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }{ "_id" :4 }V tomto případě dokument 4 nevrátil pro pole žádnou hodnotu. Nevrátil ani název pole.
Nulové a chybějící hodnoty
Pokud je operand prázdný nebo chybí,
$last
vrátínull
.Předpokládejme, že vložíme následující dokument:
{ "_id" :5, "player" :"Meg", "scores" :null }Spusťte kód znovu:
db.players.aggregate([ { $project: { "lastScore": { $last: "$scores" } } } ])
Výsledek:
{ "_id" :1, "lastScore" :3 }{ "_id" :2, "lastScore" :18 }{ "_id" :3, "lastScore" :8 }{ "_id" :4 }{ "_id" :5, "lastScore" :null }Tentokrát vrátilo pole s hodnotou
null
.Neplatný operand
Operand pro
$last
musí vyřešit na pole, null nebo chybějící. Poskytnutí neplatného operandu má za následek chybu.Abychom to demonstrovali, zkusme použít
$last
protiplayer
pole (což není pole):db.players.aggregate([ { $project: { "lastPlayer": { $last: "$player" } } } ])
Výsledek:
Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"argument $posledního musí být pole, ale je to řetězec", "code" :28689, "codeName" :"Location28689"} :agregace se nezdařila :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:618:17example @sqldat.com/mongo/shell/assert.js:708:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1046:12@( shell):1:1Podle očekávání vrátila chybu.