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

$lastN (operador acumulador )

$lastN

Retorna o resultado da avaliação de uma expressão especificada sobre os últimos elementos n em um grupo. Os resultados serão significativos somente se os dados de entrada para o estágio de agrupamento tiverem uma ordem de classificação definida. Se o grupo tiver menos de n elementos, $lastN retornará todos os elementos no grupo.

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

Observação

Desambiguação

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

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

{
$lastN:
{
input: <expression>,
n: <expression>
}
}
Campo
Tipo
Descrição

input

Expressão

A expressão input é avaliada sobre cada documento no grupo de entrada, e os últimos resultados n são preservados.

n

Expressão

O número de elementos que $lastN retorna do grupo. Para obter um exemplo de configuração de n dinamicamente com base na chave de grupo, consulte Definir n com base na chave de grupo.

  • $lastN não filtra valores nulos.

  • $lastN converte valores ausentes em nulo.

Você pode utilizar $lastN e $bottomN para retornar os últimos elementos n de um grupo. No entanto, a diferença de quando usar cada um depende se os documentos de entrada já estão classificados.

  • Se os documentos que chegam a $group já estiverem ordenados, você deverá usar $lastN.

  • Se você estiver classificando e selecionando os elementos n inferiores, poderá usar $bottomN para realizar ambas as tarefas com um acumulador.

Os exemplos nesta página utilizam a collection movies no conjunto de dados de amostra sample_mflix. Para saber como carregar o conjunto de dados de amostra em sua implantação do MongoDB , consulte Importar dados de amostra para sua implantação do Atlas .

Você pode usar o acumulador $lastN para encontrar os filmes lançados mais recentemente de um gênero específico.

db.movies.aggregate( [
{
$match: { genres: "Horror", year: { $type: "int" } }
},
{
$sort: { year: 1, title: 1 }
},
{
$group:
{
_id: "Horror",
lastThreeMovies:
{
$lastN:
{
input: [ "$title", "$year" ],
n: 3
}
}
}
}
] )

O pipeline anterior:

  • Utiliza $match para filtrar os resultados para filmes em que Horror está incluído na array genres e onde year é um número inteiro.

  • Classifica os resultados por year em ordem crescente e, em seguida, por title alfabeticamente como desempate.

  • Agrupa todos os documentos resultantes em um único grupo.

  • Especifica os campos que são entrada para $lastN com input : ["$title", "$year"].

  • Usa $lastN para retornar os últimos três documentos (classificados por ano crescente, com title como desempate) para o gênero Horror com n: 3.

Você pode usar o acumulador $lastN para encontrar os últimos n campos de entrada em cada gênero.

db.movies.aggregate( [
{
$match: { year: { $type: "int" } }
},
{
$unwind: "$genres"
},
{
$sort: { year: 1, title: 1 }
},
{
$group:
{
_id: "$genres",
movies:
{
$lastN:
{
input: [ "$title", "$year" ],
n: 3
}
}
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

O pipeline anterior:

  • Utiliza $match para filtrar filmes onde year é um número inteiro.

  • Usa $unwind para criar um documento separado para cada gênero na array genres.

  • Classifica os resultados por year em ordem crescente e, em seguida, por title alfabeticamente.

  • Utiliza $group para agrupar os resultados por genres.

  • Usa $lastN para retornar os últimos três documentos (por ano crescente, com title como desempate) para cada gênero com n: 3.

  • Especifica os campos que são entrada para $lastN com input : ["$title", "$year"].

  • Limita a saída a cinco documentos para melhorar a legibilidade.

Você pode atribuir o valor de n dinamicamente com base na chave do grupo. Neste exemplo, a expressão $cond utiliza o campo rated para alterar o valor de n:

db.movies.aggregate( [
{
$match: {
rated: { $in: [ "G", "PG", "PG-13", "R" ] },
year: { $type: "int" },
title: { $regex: "^[A-Za-z0-9]" }
}
},
{ $sort: { title: 1 } },
{
$group:
{
_id: { rated: "$rated" },
movies:
{
$lastN:
{
input: "$title",
n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } }
}
}
}
},
{ $sort: { "_id.rated": 1 } }
] )

O pipeline anterior:

  • Filtros para filmes com classificações de conteúdo de G, PG, PG-13 ou R, onde year é um número inteiro e title começa com um caractere alfanumérico.

  • Classifica os resultados alfabeticamente por title.

  • Agrupa filmes por rated (a classificação do conteúdo).

  • Usa a expressão $cond para retornar filmes 3 para filmes com classificação PG e filme 1 para todas as outras classificações.

Na saída, a classificação PG retorna 3 filmes, enquanto as classificações G, PG-13 e R retornam 1 filme.