该 $shift 运算符是聚合管道中使用的窗口运算符,用于在分区内移动值并返回移位值。 这在需要比较排序分区中相邻文档的值的操作中非常有用。
Syntax
{
$shift: {
output: <expression>,
by: <number>,
default: <expression>
}
}
参数
| 参数 | Description |
|---|---|
output |
指定将移动其值的字段或表达式。 |
by |
指定要移动值的位置数。 正值向前移动,负值向后移动。 |
default |
指定当位移操作超出边界时要返回的默认值。 |
示例
示例 1:转移销售数据
此示例演示如何用于 $shift 计算已排序的销售数据分区中每个文档的上一个销售值。
db.collection.aggregate([
{
$setWindowFields: {
partitionBy: "$sales.salesByCategory.categoryName",
sortBy: { "sales.salesByCategory.totalSales": 1 },
output: {
previousSales: {
$shift: {
output: "$sales.salesByCategory.totalSales",
by: -1,
default: null
}
}
}
}
}
])
示例 2:转移促销事件日期
此示例通过按 startDate 对所有事件进行排序来计算上一个促销事件的开始日期。 由于我们希望将所有事件一起处理,因此我们不会分区。
db.promotionEvents.aggregate([
{
$setWindowFields: {
partitionBy: null,
sortBy: { "promotionalDates.startDate": 1 },
output: {
previousStartDate: {
$shift: {
output: "$promotionalDates.startDate",
by: -1,
default: null
}
}
}
}
}
])
相关内容
- 查看用于 从 MongoDB 迁移到 Azure DocumentDB 的选项。
- 详细了解 与 MongoDB 的功能兼容性。