MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB avec Mongoid dans Rails - Indexation géospatiale

Vous pouvez définir des index géographiques comme celui-ci dans mongoid

class Item
  include Mongoid::Document

  field :loc, :type => Array

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

  )
end

Et pour les requêtes

$à proximité commande (sans maxDistance)

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

$à proximité commande (avec maxDistance)

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

Convertissez la distance par 111,12 (un degré équivaut à environ 111,12 kilomètres) lorsque vous utilisez km, ou laissez la distance telle qu'elle est en utilisant degré

$centerSphere / $nearSphere requêtes

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

Cela trouvera les articles dans un rayon de 10 km. Ici, nous devons convertir la distance/6371 (rayon terrestre) pour que cela fonctionne avec km.

$box (requêtes de boîte englobante)

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

Cela vous aidera à trouver les éléments dans la boîte englobante donnée.