MongoDB聚合运算符:$range
$range
聚合运算符生成并返回一个数字序列数组。数字序列由指定的数字开始,一次增加指定的步长,直到指定的最终值(但不包括最终值)。
语法
{ $range: [ <start>, <end>, <non-zero step> ] }
参数字段说明
字段 | 类型 | 是否必须 | 说明 |
---|---|---|---|
<start> | 整数表达式 | 是 | 用于指定序列的开始值,可以是任何能够解析为整数的表达式 |
<end> | 整数表达式 | 是 | 指定序列的上限,可以是任何能够解析为整数的表达式 |
<non-zero step> | 整数表达式 | 否 | 指定增长的补偿,可以是任何能够解析为非零整数的表达式,缺省值为1 |
使用
<start>
和<end>
参数为必选参数,且要求必须是整数<non-zero step>
参数为可选参数,如果省略,其缺省值为1
|例如|结果|
|{ $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 ]
|
举例
distances
集合中的文档列出了几个城市到旧金山San Francisco的距离:
{ _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英里停下来休息一次。下面的聚合使用$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 ] }