$shift
Shifts values within a partition and returns the shifted value, useful for comparing values from adjacent documents in sorted partitions.
Syntax
{ $shift: { output: <expression>, by: <number>, default: <expression> } }
Parameters
output
objectrequiredField or expression whose value will be shifted
by
numberrequiredNumber of positions to shift (positive for forward, negative for backward)
default
objectDefault value to return if shift operation goes out of bounds
Examples
Shifting sales data
Calculate previous sales value for each document in sorted partition
Query:
db.collection.aggregate([{ $setWindowFields: { partitionBy: "$sales.salesByCategory.categoryName", sortBy: { "sales.salesByCategory.totalSales": 1 }, output: { previousSales: { $shift: { output: "$sales.salesByCategory.totalSales", by: -1, default: null } } } } }])
Output:
Documents with previous sales values shifted by one position backward
Shifting promotional event dates
Get previous promotional event start date for comparison
Query:
db.promotionEvents.aggregate([{ $setWindowFields: { partitionBy: null, sortBy: { "promotionalDates.startDate": 1 }, output: { previousStartDate: { $shift: { output: "$promotionalDates.startDate", by: -1, default: null } } } } }])
Output:
Promotion events with previous event start dates for temporal analysis