MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB con Mongoid in Rails - Indicizzazione geospaziale

Puoi definire indici geografici come questo in mongoid

class Item
  include Mongoid::Document

  field :loc, :type => Array

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

  )
end

E per le domande

$vicino comando (senza maxDistance)

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

$vicino comando (con maxDistance)

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

Converti la distanza di 111,12 (un grado equivale a circa 111,12 chilometri) quando usi i km, oppure lascia la distanza così com'è usando i gradi

$centerSphere / $nearSphere domande

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

Questo troverà gli articoli entro un raggio di 10 km. Qui dobbiamo convertire la distanza/6371 (raggio terrestre) per farlo funzionare con km.

$scatola (query sui riquadri di delimitazione)

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

Questo ti aiuterà a trovare gli elementi all'interno del riquadro di delimitazione specificato.