Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

$last (operador acumulador )

$last

Retorna o resultado de uma expressão para o último documento em um grupo de documentos. Só faz sentido quando os documentos estão em uma ordem definida.

O acumulador $last está disponível nos seguintes estágios:

Observação

Desambiguação

Esta página descreve $last quando usado como acumulador. Os acumuladores retornam um único valor agregado como soma, máximo ou mínimo em um grupo de documentos de entrada.

Você também pode usar $last nestes outros contextos:

{ $last: <expression> }

Para definir a ordem do documento para $last em um estágio de agrupamento, adicione um estágio $sort anterior.

Documentos em um grupo podem estar sem campos. $last lida com valores ausentes da seguinte forma:

  • Se não houver documentos do estágio anterior do pipeline, o estágio $group não retornará nada.

  • Quando o expression do último documento no grupo avalia para um valor ausente, $last retorna null.

Por exemplo, considere os seguintes documentos na collection badData, onde alguns documentos não têm campos:

db.badData.insertMany( [
{ "_id": 1, "price": 6, "quantity": 6 },
{ "_id": 2, "item": "album", "price": 5, "quantity": 5 },
{ "_id": 7, "item": "tape", "price": 6, "quantity": 6 },
{ "_id": 8, "price": 5, "quantity": 5 },
{ "_id": 9, "item": "album", "price": 3, "quantity": '' },
{ "_id": 10, "item": "tape", "price": 3, "quantity": 4 },
{ "_id": 12, "item": "cd", "price": 7 }
] )

Consulte a coleção badData, agrupando a saída no campo item:

db.badData.aggregate( [
{ $sort: { item: 1, price: 1 } },
{ $group:
{
_id: "$item",
inStock: { $last: "$quantity" }
}
}
] )

$last seleciona o último documento de cada grupo de saída. Os documentos que não possuem o campo item são agrupados com um valor null para o campo _id. Quando o campo acumulador está ausente (quantity neste exemplo), $last retorna null.

Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

O exemplo a seguir classifica os filmes por ano e título e, em seguida, os agrupa por gênero para encontrar o filme mais recente lançado em cada gênero:

db.movies.aggregate( [
{ $match: { year: { $type: "int" } } },
{ $sort: { year: 1, title: 1 } },
{ $unwind: "$genres" },
{
$group: {
_id: "$genres",
lastMovieTitle: { $last: "$title" },
lastMovieYear: { $last: "$year" }
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

No pipeline anterior:

  • $match filtros para filmes com um campoyear inteiro. Isso elimina dados incorretos em que year está ausente ou não é um número.

  • $sort ordena filmes por year em ordem crescente e, em seguida, title em ordem alfabética.

  • $unwind cria um documento separado para cada gênero na array genres, mantendo a ordem de classificação estabelecida anteriormente.

  • $group com $last retorna title e year do último filme (mais recente por ano e alfabeticamente por último por título) para cada gênero.

  • Um segundo $sort classifica os resultados alfabeticamente por gênero.

  • $limit restringe a saída a gêneros 5.