$shift

O $shift é um operador de janela usado em pipelines de agregação para deslocar valores dentro de uma partição e retornar o valor deslocado. É útil para operações em que você precisa comparar valores de documentos adjacentes em uma partição classificada.

Sintaxe

{
  $shift: {
    output: <expression>,
    by: <number>,
    default: <expression>
  }
}

Parâmetros

Parâmetro Description
output Especifica o campo ou a expressão cujo valor será deslocado.
by Especifica o número de posições para deslocar o valor. Os valores positivos mudam para frente, enquanto os valores negativos mudam para trás.
default Especifica o valor padrão a ser retornado se a operação de deslocamento sair dos limites.

Exemplo(s)

Exemplo 1: Mudando dados de vendas

Este exemplo demonstra como usar $shift para calcular o valor de vendas anterior para cada documento em uma partição classificada de dados de vendas.

db.collection.aggregate([
  {
    $setWindowFields: {
      partitionBy: "$sales.salesByCategory.categoryName",
      sortBy: { "sales.salesByCategory.totalSales": 1 },
      output: {
        previousSales: {
          $shift: {
            output: "$sales.salesByCategory.totalSales",
            by: -1,
            default: null
          }
        }
      }
    }
  }
])

Exemplo 2: Mudança de datas de evento promocionais

Este exemplo calcula a data de início do evento promocional anterior classificando todos os eventos por startDate. Como queremos tratar todos os eventos juntos, não particionamos.

db.promotionEvents.aggregate([
  {
    $setWindowFields: {
      partitionBy: null,
      sortBy: { "promotionalDates.startDate": 1 },
      output: {
        previousStartDate: {
          $shift: {
            output: "$promotionalDates.startDate",
            by: -1,
            default: null
          }
        }
      }
    }
  }
])