$shift

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
          }
        }
      }
    }
  }
])