$range (aggregation)

在本页面

Definition

  • $range
    • 返回一个数组,其元素是生成的数字序列。 $range从指定的起始编号开始,按 Sequences 将起始编号增加指定的步长值,直到(但不包括)endpoints 为止,生成序列。

$range具有以下运算符表达式语法

{ $range: [ <start>, <end>, <non-zero step> ] }
OperandDescription
<start>一个整数,指定序列的开始。可以是任何可解析为整数的有效expression
<end>一个整数,指定序列的互斥上限。可以是任何可解析为整数的有效expression
<non-zero step>可选的。一个整数,指定增量值。可以是任何可解析为非零整数的有效expression。默认为 1.

Behavior

<start><end>参数是必需的,并且必须为整数。 <non-zero step>参数是可选的,如果省略,则默认为1

ExampleResults
{ $range: [ 0, 10, 2 ] }[ 0, 2, 4, 6, 8 ]
{ $range: [ 10, 0, -2 ] }[ 10, 8, 6, 4, 2 ]
{ $range: [ 0, 10, -2 ] }[ ]
{ $range: [ 0, 5 ] }[ 0, 1, 2, 3, 4 ]

Example

下面的示例使用一个名为distances的集合,该集合列出了城市以及距旧金山的英里数。

distances集合中的文档:

{ _id: 0, city: "San Jose", distance: 42 }
{ _id: 1, city: "Sacramento", distance: 88 }
{ _id: 2, city: "Reno", distance: 218 }
{ _id: 3, city: "Los Angeles", distance: 383 }

一位骑自行车的人正计划从旧金山骑车到集合中列出的每个城市,并希望每 25 英里停下来 Rest 一下。以下聚合管道操作使用$range运算符确定每个行程的停止点。

db.distances.aggregate([{
    $project: {
        _id: 0,
        city: 1,
        "Rest stops": { $range: [ 0, "$distance", 25 ] }
    }
}])

该操作返回以下内容:

{ "city" : "San Jose", "Rest stops" : [ 0, 25 ] }
{ "city" : "Sacramento", "Rest stops" : [ 0, 25, 50, 75 ] }
{ "city" : "Reno", "Rest stops" : [ 0, 25, 50, 75, 100, 125, 150, 175, 200 ] }
{ "city" : "Los Angeles", "Rest stops" : [ 0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375 ] }