$range (aggregation)

Definition

  • $range
  • Returns an array whose elements are a generated sequence of numbers.$range generates the sequence from the specifiedstarting number by successively incrementing the starting number bythe specified step value up to but not including the end point.

$range has the following operatorexpression syntax:

  1. { $range: [ <start>, <end>, <non-zero step> ] }

OperandDescription<start>An integer that specifies the start of the sequence. Can beany valid expressionthat resolves to an integer.<end>An integer that specifies the exclusive upper limit of thesequence. Can be any valid expression that resolves to an integer.<non-zero step>Optional. An integer that specifies the increment value.Can be any valid expressionthat resolves to a non-zero integer. Defaults to 1.

Behavior

The <start> and <end> arguments are required and must beintegers. The <non-zero step> argument is optional, and defaultsto 1 if omitted.

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

The following example uses a collection called distancesthat lists cities along with their distance in miles from SanFrancisco.

Documents in the distances collection:

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

A bicyclist is planning to ride from SanFrancisco to each city listed in thecollection and wants to stop and rest every 25 miles.The following aggregation pipelineoperation uses the $range operator to determinethe stopping points for each trip.

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

The operation returns the following:

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