$shift

Operator $shift adalah operator jendela yang digunakan dalam alur agregasi untuk menggeser nilai dalam partisi dan mengembalikan nilai yang digeser. Ini berguna untuk operasi di mana Anda perlu membandingkan nilai dari dokumen yang berdekatan dalam partisi yang diurutkan.

Syntax

{
  $shift: {
    output: <expression>,
    by: <number>,
    default: <expression>
  }
}

Parameter-parameternya

Pengaturan Description
output Menentukan bidang atau ekspresi yang nilainya akan digeser.
by Menentukan jumlah posisi untuk menggeser nilai. Nilai positif bergeser ke depan, sementara nilai negatif bergeser ke belakang.
default Menentukan nilai default yang akan dikembalikan jika operasi shift keluar dari batas.

Contoh

Contoh 1: Mengubah data penjualan

Contoh ini menunjukkan cara menggunakan $shift untuk menghitung nilai penjualan sebelumnya untuk setiap dokumen dalam partisi data penjualan yang diurutkan.

db.collection.aggregate([
  {
    $setWindowFields: {
      partitionBy: "$sales.salesByCategory.categoryName",
      sortBy: { "sales.salesByCategory.totalSales": 1 },
      output: {
        previousSales: {
          $shift: {
            output: "$sales.salesByCategory.totalSales",
            by: -1,
            default: null
          }
        }
      }
    }
  }
])

Contoh 2: Mengalihkan tanggal acara promosi

Contoh ini menghitung tanggal mulai acara promosi sebelumnya dengan mengurutkan semua peristiwa berdasarkan startDate. Karena kita ingin memperlakukan semua peristiwa bersama-sama, kita tidak mempartisi.

db.promotionEvents.aggregate([
  {
    $setWindowFields: {
      partitionBy: null,
      sortBy: { "promotionalDates.startDate": 1 },
      output: {
        previousStartDate: {
          $shift: {
            output: "$promotionalDates.startDate",
            by: -1,
            default: null
          }
        }
      }
    }
  }
])