$shift

Operátor $shift je operátor okna používaný v agregačních kanálech k posunu hodnot v rámci oddílu a vrácení posunuté hodnoty. Je užitečné pro operace, ve kterých potřebujete porovnat hodnoty ze sousedících dokumentů v seřazených oblastech.

Syntaxe

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

Parametry

Parameter Description
output Určuje pole nebo výraz, jehož hodnota bude přesunuta.
by Určuje počet pozic, o které má být hodnota posunuta. Kladné hodnoty se posunou dopředu, zatímco záporné hodnoty se posunou dozadu.
default Určuje výchozí hodnotu, která se má vrátit, pokud operace posunu překročí hranice.

Příklady

Příklad 1: Posun prodejních dat

Tento příklad ukazuje, jak použít $shift k výpočtu předchozí hodnoty prodeje pro každý dokument v seřazeném oddílu prodejních dat.

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

Příklad 2: Posunutí kalendářních dat propagačních událostí

Tento příklad vypočítá počáteční datum předchozí propagační události seřazením všech událostí podle hodnoty startDate. Vzhledem k tomu, že chceme zacházet se všemi událostmi společně, nedělíme oddíly.

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