2012-11-08 10 views
1

J'ai des problèmes pour interroger les index géospatiaux avec MongoDB/Rails. J'utilise ce petit bijou - https://github.com/kristianmandrup/mongoid_geospatialUtilisation de geoNear avec Rails/Mongoid

Voici mon modèle assez basique:

class Company 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Geospatial 

    field :name, type: String 

    field :location, type: Array, spatial: true 

    spatial_index :location 

    validates :location, location: true 
end 

Puis, dans mon contrôleur, j'ai cette

#@vendors = Vendor.where(:location.near => {:point => [-2.1294761000000335,57.0507625], :max => 5}) 

Cependant, ce ne revient pas attendu résultats (c'est-à-dire qu'il retourne des choses de partout, pas juste à côté de ce lon/lat particulier)

Aussi, comment ferais-je pour faire un ge o Déjà avec ça?
Pour que je puisse récupérer les distances du point central pour chaque résultat?

Remarque Après avoir écrit cette question, je l'ai vu la pierre précieuse a été mis à jour, mais je ne sais pas s'il y a une meilleure alternative ..?

Répondre

4

Vous n'avez pas besoin de la pierre précieuse mongoid_geospatial à faire une requête geoNear: mongoidalready supports it (dans la version 3 au moins).

Changer votre modèle:

class Company 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name, type: String 

    field :location, type: Array 

    index({location: "2d"}) 

    validates :location, location: true 
end 

et exécutez votre requête comme:

@vendors = Vendor.geo_near([-2.1294761000000335,57.0507625]).max_distance(5) 
Questions connexes