Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Operatorn $shift är en fönsteroperator som används i aggregeringspipelines för att flytta värden inom en partition och returnera det skiftade värdet. Det är användbart för åtgärder där du behöver jämföra värden från intilliggande dokument i en sorterad partition.
Syntax
{
$shift: {
output: <expression>,
by: <number>,
default: <expression>
}
}
Parameterar
| Parameter | Description |
|---|---|
output |
Anger det fält eller uttryck vars värde ska flyttas. |
by |
Anger antalet positioner för att flytta värdet. Positiva värden flyttas framåt, medan negativa värden flyttas bakåt. |
default |
Anger standardvärdet som ska returneras om skiftåtgärden hamnar utanför gränserna. |
Exempel
Exempel 1: Flytta försäljningsdata
Det här exemplet visar hur du använder $shift för att beräkna det tidigare försäljningsvärdet för varje dokument i en sorterad partition med försäljningsdata.
db.collection.aggregate([
{
$setWindowFields: {
partitionBy: "$sales.salesByCategory.categoryName",
sortBy: { "sales.salesByCategory.totalSales": 1 },
output: {
previousSales: {
$shift: {
output: "$sales.salesByCategory.totalSales",
by: -1,
default: null
}
}
}
}
}
])
Exempel 2: Ändra datum för kampanjevenemang
Det här exemplet beräknar det tidigare kampanjevenemangets startdatum genom att sortera alla händelser efter startDate. Eftersom vi vill behandla alla händelser tillsammans, gör vi ingen partitionering.
db.promotionEvents.aggregate([
{
$setWindowFields: {
partitionBy: null,
sortBy: { "promotionalDates.startDate": 1 },
output: {
previousStartDate: {
$shift: {
output: "$promotionalDates.startDate",
by: -1,
default: null
}
}
}
}
}
])