Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operátor $shift je operátor okna používaný v agregačních kanálech k posunu hodnot v rámci oddílu a vrácení posunuté hodnoty. Je užitečné pro operace, ve kterých potřebujete porovnat hodnoty ze sousedících dokumentů v seřazených oblastech.
Syntaxe
{
$shift: {
output: <expression>,
by: <number>,
default: <expression>
}
}
Parametry
| Parameter | Description |
|---|---|
output |
Určuje pole nebo výraz, jehož hodnota bude přesunuta. |
by |
Určuje počet pozic, o které má být hodnota posunuta. Kladné hodnoty se posunou dopředu, zatímco záporné hodnoty se posunou dozadu. |
default |
Určuje výchozí hodnotu, která se má vrátit, pokud operace posunu překročí hranice. |
Příklady
Příklad 1: Posun prodejních dat
Tento příklad ukazuje, jak použít $shift k výpočtu předchozí hodnoty prodeje pro každý dokument v seřazeném oddílu prodejních dat.
db.collection.aggregate([
{
$setWindowFields: {
partitionBy: "$sales.salesByCategory.categoryName",
sortBy: { "sales.salesByCategory.totalSales": 1 },
output: {
previousSales: {
$shift: {
output: "$sales.salesByCategory.totalSales",
by: -1,
default: null
}
}
}
}
}
])
Příklad 2: Posunutí kalendářních dat propagačních událostí
Tento příklad vypočítá počáteční datum předchozí propagační události seřazením všech událostí podle hodnoty startDate. Vzhledem k tomu, že chceme zacházet se všemi událostmi společně, nedělíme oddíly.
db.promotionEvents.aggregate([
{
$setWindowFields: {
partitionBy: null,
sortBy: { "promotionalDates.startDate": 1 },
output: {
previousStartDate: {
$shift: {
output: "$promotionalDates.startDate",
by: -1,
default: null
}
}
}
}
}
])