我現在有在Ruby on Rails應用程序Mongoid模型,例如:MongoDB可以自動爲地理位置數據生成特殊索引嗎?
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任務,如rake db:mongoid:create_indexes
的索引,但我不WA nt每次創建模型時都必須執行此操作。插入到集合時,模型是否有自動創建的方法?
模型實例保存到集合後,您不需要創建索引。你看到你需要做什麼?當你定義模型時,它應該完成一次。 – 2012-04-22 20:52:42
創建模型後,會創建BSON ID,但是當我試圖在集合上運行查詢時(例如上面列出的),它會拋出「無法找到特殊索引」錯誤。 – joshcollie 2012-04-22 21:16:24