Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
}
}
}
}
}
])