sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $last Aggregation Pipeline Operator

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 proti player 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:1

Podle očekávání vrátila chybu.


  1. jak použít naplnit a agregovat ve stejném prohlášení?

  2. redis a watch + multi umožňuje souběžné uživatele

  3. Jak otestovat své upgrady aplikace MongoDB?

  4. Jak definuji metody v modelu Mongoose?