Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
}
}
}
}
}
])