MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB com Mongoid em Rails - Indexação Geoespacial


Você pode definir índices geográficos como este no mongoid
class Item
  include Mongoid::Document

  field :loc, :type => Array

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

  )
end

E para consultas

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

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

Converta a distância em 111,12 (um grau é aproximadamente 111,12 quilômetros) ao usar km ou deixe a distância como está usando o grau

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

Isto irá encontrar os itens dentro do raio de 10 km. Aqui precisamos converter a distância/6371(raio da terra) para que funcione com km.

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

Isso ajudará você a encontrar os itens dentro da caixa delimitadora fornecida.