$shift

Az $shift operátor az aggregációs folyamatokban használt ablak operátor, amellyel a partíción belüli értékeket áthelyezi, és visszaadja az eltolt értéket. Olyan műveletek esetén hasznos, amelyekben egy rendezett partíció szomszédos dokumentumainak értékeit kell összehasonlítani.

Szemantika

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

Paraméterek

Paraméter Description
output Azt a mezőt vagy kifejezést adja meg, amelynek az értéke el lesz tolva.
by Megadja az érték eltolásához tartozó pozíciók számát. A pozitív értékek előre, míg a negatív értékek hátrafelé tolódnak.
default Meghatározza az alapértelmezett értéket, amit visszaad, ha az eltolás művelet túllépi a határokat.

Példa(ák)

1. példa: Értékesítési adatok áthelyezése

Ez a példa bemutatja, hogyan lehet $shift segítségével kiszámolni az előző értékesítési értéket az egyes dokumentumokhoz az értékesítési adatok rendezett partíciójában.

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

2. példa: Promóciós események dátumának eltolása

Ez a példa az előző promóciós esemény kezdési dátumát számítja ki az összes eseményt a startDate szerint rendezve. Mivel az összes eseményt együtt szeretnénk kezelni, nem particionáljuk.

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