$range (aggregation)
在本页面
Definition
$range
- 返回一个数组,其元素是生成的数字序列。 $range从指定的起始编号开始,按 Sequences 将起始编号增加指定的步长值,直到(但不包括)endpoints 为止,生成序列。
{ $range: [ <start>, <end>, <non-zero step> ] }
Operand | Description |
---|---|
<start> | 一个整数,指定序列的开始。可以是任何可解析为整数的有效expression。 |
<end> | 一个整数,指定序列的互斥上限。可以是任何可解析为整数的有效expression。 |
<non-zero step> | 可选的。一个整数,指定增量值。可以是任何可解析为非零整数的有效expression。默认为 1. |
Behavior
<start>
和<end>
参数是必需的,并且必须为整数。 <non-zero step>
参数是可选的,如果省略,则默认为1
。
Example | Results |
---|---|
{ $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 ] }