$shift

L'operatore $shift è un operatore window usato nelle pipeline di aggregazione per spostare i valori all'interno di una partizione e restituire il valore spostato. È utile per le operazioni in cui è necessario confrontare i valori dei documenti adiacenti in una partizione ordinata.

Sintassi

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

Parametri

Parametro Description
output Specifica il campo o l'espressione il cui valore verrà spostato.
by Specifica il numero di posizioni per spostare il valore. I valori positivi passano in avanti, mentre i valori negativi passano all'indietro.
default Specifica il valore predefinito da restituire se l'operazione di spostamento esce dai limiti.

Esempio(i)

Esempio 1: Spostamento dei dati di vendita

In questo esempio viene illustrato come usare $shift per calcolare il valore di vendita precedente per ogni documento in una partizione ordinata dei dati di vendita.

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

Esempio 2: Spostamento delle date degli eventi promozionali

In questo esempio viene calcolata la data di inizio dell'evento promozionale precedente ordinando tutti gli eventi in base a startDate. Poiché si vogliono trattare tutti gli eventi insieme, non si esegue la partizione.

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