$shift

El $shift operador es un operador de ventana que se usa en canalizaciones de agregación para desplazar valores dentro de una partición y devolver el valor desplazado. Resulta útil para las operaciones en las que es necesario comparar valores de documentos adyacentes en una partición ordenada.

Syntax

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

Parámetros

Parámetro Description
output Especifica el campo o expresión cuyo valor se desplazará.
by Especifica el número de posiciones para desplazar el valor. Los valores positivos se desplazan hacia delante, mientras que los valores negativos se desplazan hacia atrás.
default Especifica el valor predeterminado que se va a mostrar si la operación de desplazamiento se sale de los límites.

Ejemplos

Ejemplo 1: Cambio de datos de ventas

En este ejemplo se muestra cómo usar $shift para calcular el valor de ventas anterior para cada documento en una partición ordenada de datos de ventas.

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

Ejemplo 2: Cambio de fechas de eventos promocionales

En este ejemplo se calcula la fecha de inicio del evento promocional anterior ordenando todos los eventos por startDate. Puesto que queremos tratar todos los eventos juntos, no particionamos.

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