$setWindowFields (Definir Campos de Janela)

Última atualização: 2026-10-09

$setWindowFields (Definir Campos de Janela)

$setWindowFields realiza cálculos de janela — classificações, médias móveis, totais acumulados — sobre partições e grava os resultados de volta em cada documento. Especifique os campos de saída com operadores de janela (como $rank, $denseRank ou acumuladores), uma ordem sortBy e um intervalo de janela opcional. Pense nas funções de janela do SQL.

CategoriaAgrupamento e Janela
Versão do MongoDB5.0+
Idioma do Exemplomongosh (Shell)

📝 Sintaxe

{ $setWindowFields: { partitionBy: <expression>, sortBy: { <field>: <1 or -1> }, output: { <field>: { <windowOperator>: ..., window: { documents: [...], range: [...] } } } } }

⚙️ Parâmetros

partitionByExpressão de partição; quando omitida, todos os documentos formam uma única partição.
sortByOrdem de classificação dentro das partições, que determina a ordem de cálculo da janela.
outputCampos de saída com suas definições de operador de janela.

Retorno:Fluxo de documentos com campos calculados por janela adicionados

▶ Exemplo

Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):

// $setWindowFields: total acumulado por região
db.sales.aggregate([
  { $setWindowFields: {
    partitionBy: '$region',
    sortBy: { date: 1 },
    output: {
      runningTotal: { $sum: '$amount', window: { documents: ['unbounded', 'current'] } }
    }
  } }
])

Saída:

// Cada venda ganha um total acumulado
{ "region": "EAST", "date": "2024-01-02", "amount": 30, "runningTotal": 30 }

📌 Notas

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

QQual é a diferença entre $setWindowFields e $group?
A$group colapsa um grupo em um único documento; $setWindowFields mantém todos os documentos e grava os resultados de janela de volta neles.
QEle consegue calcular uma média móvel?
ASim, defina a janela dos 7 documentos anteriores até o atual e use o acumulador $avg.
QComo escrevo um intervalo de janela?
APor exemplo, { documents: ['unbounded', 'current'] } abrange do início da partição até o documento atual; range define um intervalo de valores.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%