错误13038:找不到任何特殊索引:2d(需要索引),2dsphere(需要索引)

时间:2013-08-08 19:45:46

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

我一直在寻找这么多个小时。每次我在我的模型上调用'near'方法时,都会出现以下错误:

2.0.0p247 :001 > Status.near(@coordinates, 10).to_a
Moped::Errors::QueryFailure: The operation: #<Moped::Protocol::Query
  @length=157
  @request_id=3
  @response_to=0
  @op_code=2004
  @flags=[:slave_ok]
  @full_collection_name="howsmycity_development.statuses"
  @skip=0
  @limit=0
  @selector={"deleted_at"=>nil, "coordinates"=>{"$nearSphere"=>[74.3344609, 31.5130751], "$maxDistance"=>0.002526046147566618}}
  @fields=nil>
failed with error 13038: "can't find any special indices: 2d (needs index), 2dsphere (needs index),  for: { deleted_at: null, coordinates: { $nearSphere: [ 74.3344609, 31.5130751 ], $maxDistance: 0.002526046147566618 } }"

我已经尝试过运行:rake db:mongoid:create_indexes

使用Ruby 2,Rails 4,Mongoid 4,MongoDB 2.4.4和Geocoder 1.1.8。顺便说一下,我也在使用Mongoid-Paranoia Gem。我也试过把所有的宝石都指向他们的github回购,没有运气。我也打开了一个问题here

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

通过无数个小时的调试,我发现从HEAD安装Geocoder Gem实际上解决了问题,因为Gem's Author said

gem 'geocoder', github: 'alexreisner/geocoder'

但当时它对我不起作用。我认为我的数据库已损坏。我这样说是因为我必须从我的本地机器中完全删除所有数据库,并且还要删除&amp;再次将 MongoHQ 插件添加到我的 Heroku 实例中,只是为了使其工作(因为问题仍然存在于Heroku上)。

一旦我做到了,我就重新做了rake db:mongoid:create_indexes,一切都运转良好。