MongoDB $range 运算符介绍

$range 是 MongoDB 聚合管道中的一个运算符,用于生成数字序列。它可以接收三个参数,分别是序列的起始值、结束值和步长。根据这三个参数, $range 可以生成一个数字序列。

语法

$range 运算符的语法如下:

{ $range: [ <start>, <end>, <step> ] }

其中, <start> 是序列的起始值, <end> 是序列的结束值, <step> 是序列的步长。这三个参数都是可选的,如果没有指定,则默认为 $range 生成一个空数组。

使用场景

$range 运算符通常用于生成数字序列,可以配合其他聚合运算符实现更复杂的操作,比如 $map$zip 等。它可以用于生成序列数组、日期数组等。在聚合管道中,可以使用 $range 生成指定范围内的数字序列,然后对序列进行聚合操作。

示例

示例 1

下面的聚合管道使用 $range 运算符,生成一个序列数组:

db.numbers.aggregate([
  {
    $project: {
      sequence: {
        $range: [0, 10, 2]
      }
    }
  }
])

运行以上聚合操作,可以得到以下结果:

{
  "sequence": [0, 2, 4, 6, 8, 10]
}

示例 2

下面的聚合管道使用 $range 运算符和 $map 运算符,生成一个日期数组:

db.orders.aggregate([
  {
    $project: {
      _id: 0,
      dates: {
        $map: {
          input: {
            $range: [
              new Date("2022-01-01"),
              new Date("2022-01-05"),
              24 * 60 * 60 * 1000
            ]
          },
          as: "date",
          in: {
            $dateToString: {
              date: "$$date",
              format: "%Y-%m-%d"
            }
          }
        }
      }
    }
  }
])

运行以上聚合操作,可以得到以下结果:

{
  "dates": [
    "2022-01-01",
    "2022-01-02",
    "2022-01-03",
    "2022-01-04",
    "2022-01-05"
  ]
}

结论

$range 是 MongoDB 聚合管道中的一个实用的运算符,可以用于生成数字序列、日期数组等。它可以配合其他聚合运算符实现更复杂的操作,在聚合管道中使用十分灵活。