【发布时间】:2012-04-22 19:23:54
【问题描述】:
我目前在 Ruby on Rails 应用程序中有一个 Mongoid 模型:
class Listen
include Mongoid::Document
field :song_title, type: String
field :song_artist, type: String
field :loc, :type => Array
field :listened_at, type: Time, default: -> { Time.now }
index(
[[:loc, Mongo::GEO2D]], background: true
)
end
例如,当我尝试查询集合时
listens = Listen.where(:loc => {"$within" => {"$centerSphere" => [location, (radius.fdiv(6371))]}})
返回错误(位置已被空白,未返回 X)
Mongo::OperationFailure (can't find special index: 2d for: { loc: { $within: { $centerSphere: [ [ XX.XXXXXXX, X.XXXXXXX ], 0.0001569612305760477 ] } } }):
我知道我可以通过诸如rake db:mongoid:create_indexes 之类的 rake 任务创建索引,但我不想每次创建模型时都必须这样做。模型有没有办法在插入集合时自动创建它?
【问题讨论】:
-
模型实例保存到集合后,您应该不需要创建索引。那是你看到的你需要做的吗?应该在定义模型时完成一次。
-
创建模型后,会创建 BSON ID,但是当我尝试对集合(例如上面列出的集合)运行查询时,它会引发
can't find special index错误。
标签: ruby-on-rails ruby-on-rails-3 mongodb geolocation mongoid