$shift

De $shift operator is een vensteroperator die wordt gebruikt in aggregatiepijplijnen om waarden binnen een partitie te verplaatsen en de verplaatste waarde te retourneren. Het is handig voor bewerkingen waarbij u waarden uit aangrenzende documenten in een gesorteerde partitie moet vergelijken.

Syntaxis

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

Parameterwaarden

Kenmerk Description
output Hiermee geeft u het veld of de expressie waarvan de waarde wordt verschoven.
by Hiermee geeft u het aantal posities om de waarde te verschuiven. Positieve waarden verschuiven vooruit, terwijl negatieve waarden achteruit verschuiven.
default Hiermee specificeert u de standaardwaarde die wordt geretourneerd als de verschuivingsbewerking buiten de grenzen valt.

Voorbeeld(en)

Voorbeeld 1: Verkoopgegevens verschuiven

In dit voorbeeld ziet u hoe $shift u de vorige verkoopwaarde voor elk document in een gesorteerde partitie met verkoopgegevens kunt berekenen.

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

Voorbeeld 2: Datums van promotieevenementen verschuiven

In dit voorbeeld wordt de begindatum van de vorige promotie-gebeurtenis berekend door alle gebeurtenissen te sorteren op startDate. Omdat we alle gebeurtenissen samen willen behandelen, partitioneren we niet.

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