Geocoder附近没有与mongoid ralls合作

时间:2014-03-03 21:02:33

标签: ruby-on-rails mongodb rails-geocoder

我有一个像这样的模型,我存储协调和地址。该模型仅用于测试。

class Geomodel
    include Mongoid::Document
    include Geocoder::Model::Mongoid
    field :coordinates, type: Array
    field :address
    before_save :update_coordinates
    def update_coordinates
        self.address = Geocoder.search(self.coordinates).first.address
    end 
    reverse_geocoded_by :coordinates
    after_validation :reverse_geocode  # auto-fetch address
end

我能够存储坐标和地址。但我无法使用

obj = Geomodel.near(坐标:[xx,xx])。 它显示了一些Mongo标准,如下所示。 #Mongoid::Criteria selector: {"coordinates"=>{"$near"=>[xx, xx]}} options: {} class: Geomodel embedded: false>

当我将对象转换为数组进行测试时,它也会显示此错误。 obj.to_a

Moped::Errors::QueryFailure: The operation: #<Moped::Protocol::Query @length=114 @request_id=18 @response_to=0 @op_code=2004 @flags=[] @full_collection_name="staging_development.geomodels" @skip=0 @limit=0 @selector={"coordinates"=>{"$near"=>[73.8719, 18.6139]}} @fields=nil> failed with error 13038: "can't find any special indices: 2d (needs index), 2dsphere (needs index), for: { coordinates: { $near: [ 73.8719, 18.6139 ] } }"

请帮助我如何解决问题或提供有关使用地理编码器查询的最佳教程的链接。 我使用的是RAILS 4和MONGOID gem。

PS:我认为这整个错误是由于以下原因造成的      1.创造范围:近。覆盖现有方法Geomodel.near。
     2.可能是由于2dsphere索引。

1 个答案:

答案 0 :(得分:0)

Re:obj = Geomodel.near(坐标:[xx,xx])

这是一个Mongoid :: Criteria&#34;查询&#34;并且不记录查询的结果。 您必须使用#to_a之类的方法对其进行迭代,以便将查询发布到MongoDB服务器并作为结果返回文档。

是的,不要定义自己的范围:靠近它会覆盖现有的Geomodel#near。

如错误诊断中所述,地理空间$ near查询需要2dsphere索引,请参阅http://docs.mongodb.org/manual/reference/operator/query/near/