Class: Mongoid::Contextual::GeoNear

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable, Command
Defined in:
lib/mongoid/contextual/geo_near.rb

Overview

Represents a $geoNear database command instruction.

Instance Attribute Summary

Attributes included from Command

#collection, #collection The collection to query against., #criteria, #criteria The criteria for the context.

Instance Method Summary collapse

Methods included from Command

#client, #command

Constructor Details

#initialize(collection, criteria, near) ⇒ GeoNear

Initialize the new map/reduce directive.

Examples:

Initialize the new map/reduce.

MapReduce.new(criteria, map, reduce)

Parameters:

  • collection (Mongo::Collection)

    The collection to run the operation on.

  • criteria (Criteria)

    The Mongoid criteria.

  • near (String)


69
70
71
72
73
74
# File 'lib/mongoid/contextual/geo_near.rb', line 69

def initialize(collection, criteria, near)
  @collection, @criteria = collection, criteria
  command[:geoNear] = collection.name.to_s
  command[:near] = near
  apply_criteria_options
end

Instance Method Details

#average_distanceFloat | nil

Get the average distance for all documents from the point in the command.

Examples:

Get the average distance.

geo_near.average_distance

Returns:

  • (Float | nil)

    The average distance.



23
24
25
26
# File 'lib/mongoid/contextual/geo_near.rb', line 23

def average_distance
  average = stats["avgDistance"]
  (average.nil? || average.nan?) ? nil : average
end

#distance_multiplier(value) ⇒ GeoNear

Provide a distance multiplier to be used for each returned distance.

Examples:

Provide the distance multiplier.

geo_near.distance_multiplier(13113.1)

Parameters:

  • value (Integer | Float)

    The distance multiplier.

Returns:

  • (GeoNear)

    The GeoNear wrapper.



55
56
57
58
# File 'lib/mongoid/contextual/geo_near.rb', line 55

def distance_multiplier(value)
  command[:distanceMultiplier] = value
  self
end

#eachEnumerator

Iterates over each of the documents in the $geoNear, excluding the extra information that was passed back from the database.

Examples:

Iterate over the results.

geo_near.each do |doc|
  p doc
end

Returns:

  • (Enumerator)

    The enumerator.



37
38
39
40
41
42
43
44
45
# File 'lib/mongoid/contextual/geo_near.rb', line 37

def each
  if block_given?
    documents.each do |doc|
      yield doc
    end
  else
    to_enum
  end
end

#empty_and_chainable?true

Is this context’s criteria considered empty?

Examples:

Is this context’s criteria considered empty?

geo_near.empty_and_chainable?

Returns:

  • (true)

    Always true.



189
190
191
# File 'lib/mongoid/contextual/geo_near.rb', line 189

def empty_and_chainable?
  true
end

#executeHash

Execute the $geoNear, returning the raw output.

Examples:

Run the $geoNear

geo_near.execute

Returns:

  • (Hash)

    The raw output



159
160
161
# File 'lib/mongoid/contextual/geo_near.rb', line 159

def execute
  results
end

#inspectString

Get a pretty string representation of the command.

Examples:

Inspect the geoNear.

geo_near.inspect

Returns:

  • (String)

    The inspection string.



82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/mongoid/contextual/geo_near.rb', line 82

def inspect
%Q{#<Mongoid::Contextual::GeoNear
  selector:   #{criteria.selector.inspect}
  class:      #{criteria.klass}
  near:       #{command[:near]}
  multiplier: #{command[:distanceMultiplier] || "N/A"}
  max:        #{command[:maxDistance] || "N/A"}
  min:        #{command[:minDistance] || "N/A"}
  unique:     #{command[:unique].nil? ? true : command[:unique]}
  spherical:  #{command[:spherical] || false}>
}
end

#max_distance(value = nil) ⇒ GeoNear | Float

Specify the maximum distance to find documents for, or get the value of the document with the furthest distance.

Examples:

Set the max distance.

geo_near.max_distance(0.5)

Get the max distance.

geo_near.max_distance

Parameters:

  • value (Integer | Float) (defaults to: nil)

    The maximum distance.

Returns:

  • (GeoNear | Float)

    The GeoNear command or the value.



107
108
109
110
111
112
113
114
# File 'lib/mongoid/contextual/geo_near.rb', line 107

def max_distance(value = nil)
  if value
    command[:maxDistance] = value
    self
  else
    stats["maxDistance"]
  end
end

#min_distance(value) ⇒ GeoNear

Specify the minimum distance to find documents for.

Examples:

Set the min distance.

geo_near.min_distance(0.5)

Parameters:

  • value (Integer | Float)

    The minimum distance.

Returns:

  • (GeoNear)

    The GeoNear command.



124
125
126
127
# File 'lib/mongoid/contextual/geo_near.rb', line 124

def min_distance(value)
  command[:minDistance] = value
  self
end

#sphericalGeoNear

Tell the command to calculate based on spherical distances.

Examples:

Add the spherical flag.

geo_near.spherical

Returns:



135
136
137
138
# File 'lib/mongoid/contextual/geo_near.rb', line 135

def spherical
  command[:spherical] = true
  self
end

#statsHash

Get the stats for the command run.

Examples:

Get the stats.

geo_near.stats

Returns:

  • (Hash)

    The stats from the command run.



169
170
171
# File 'lib/mongoid/contextual/geo_near.rb', line 169

def stats
  results["stats"]
end

#timeFloat

Get the execution time of the command.

Examples:

Get the execution time.

geo_near.time

Returns:

  • (Float)

    The execution time.



179
180
181
# File 'lib/mongoid/contextual/geo_near.rb', line 179

def time
  stats["time"]
end

#unique(value = true) ⇒ GeoNear

Tell the command whether or not the returned results should be unique.

Examples:

Set the unique flag.

geo_near.unique(false)

Parameters:

  • value (true | false) (defaults to: true)

    Whether to return unique documents.

Returns:



148
149
150
151
# File 'lib/mongoid/contextual/geo_near.rb', line 148

def unique(value = true)
  command[:unique] = value
  self
end