MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB mit Mongoid in Rails – Geodatenindizierung

Sie können solche Geo-Indizes in mongoid

definieren
class Item
  include Mongoid::Document

  field :loc, :type => Array

  index(
      [
          [:loc, Mongo::GEO2D]             
      ], background: true

  )
end

Und für Rückfragen

$in der Nähe Befehl (ohne maxDistance)

 location = [80.24958300000003, 13.060422]
 items = Item.where(:loc => {"$near" => location})

$in der Nähe Befehl (mit maxDistance)

 distance = 10 #km
 location = [80.24958300000003, 13.060422]
 items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})

Konvertieren Sie die Entfernung in 111,12 (ein Grad entspricht ungefähr 111,12 Kilometern), wenn Sie km verwenden, oder lassen Sie die Entfernung unverändert in Grad

$centerSphere / $nearSphere Abfragen

location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})

Dadurch werden die Artikel im Umkreis von 10 km gefunden. Hier müssen wir die Entfernung/6371 (Erdradius) umwandeln, damit es mit km funktioniert.

$box (Bounding-Box-Abfragen)

 first_loc = [80.24958300000003, 13.060422]
 second_loc = [81.24958300000003, 12.060422]
 items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})

Dies hilft Ihnen, die Elemente innerhalb des angegebenen Begrenzungsrahmens zu finden.