$shift

Der $shift Operator ist ein Fensteroperator, der in Aggregationspipelines verwendet wird, um Werte innerhalb einer Partition zu verschieben und den verschobenen Wert zurückzugeben. Es ist nützlich für Vorgänge, bei denen Sie Werte aus benachbarten Dokumenten in einer sortierten Partition vergleichen müssen.

Syntax

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

Die Parameter

Parameter Description
output Gibt das Feld oder den Ausdruck an, dessen Wert verschoben wird.
by Gibt die Anzahl der Positionen an, um den Wert zu verschieben. Positive Werte werden vorwärts verschoben, während negative Werte rückwärts verschoben werden.
default Gibt den Standardwert an, der zurückgegeben werden soll, wenn der Schichtvorgang außerhalb der Grenzen liegt.

Beispiel(n)

Beispiel 1: Verschieben von Umsatzdaten

In diesem Beispiel wird veranschaulicht, wie $shift den vorherigen Verkaufswert für jedes Dokument in einer sortierten Partition von Umsatzdaten berechnet.

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

Beispiel 2: Verschieben von Werbeereignisdaten

In diesem Beispiel wird das Startdatum des vorherigen Werbeereignisses berechnet, indem alle Ereignisse nach startDate sortiert werden. Da wir alle Ereignisse gemeinsam behandeln möchten, partitionieren wir nicht.

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