$shift

Operator $shift jest operatorem okna używanym w potokach agregacji w celu przesunięcia wartości w partycji i zwrócenia przesuniętej wartości. Jest to przydatne w przypadku operacji, w których należy porównać wartości z sąsiednich dokumentów w posortowanej partycji.

Składnia

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

Parametry

Parameter Description
output Określa pole lub wyrażenie, którego wartość zostanie przesunięta.
by Określa liczbę pozycji, aby przesunąć wartość. Wartości dodatnie przesuwają się do przodu, a wartości ujemne przesuwają się do tyłu.
default Określa wartość domyślną, która ma być zwracana, jeśli operacja przesunięcia wykracza poza granice.

Przykłady

Przykład 1. Przenoszenie danych sprzedaży

W tym przykładzie pokazano, jak użyć $shift metody obliczania poprzedniej wartości sprzedaży dla każdego dokumentu w posortowanej partycji danych sprzedaży.

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

Przykład 2. Zmiana dat wydarzeń promocyjnych

W tym przykładzie obliczana jest data rozpoczęcia poprzedniego wydarzenia promocyjnego przez sortowanie wszystkich zdarzeń według daty startDate. Ponieważ chcemy traktować wszystkie zdarzenia razem, nie dzielimy na części.

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