2012-04-22 46 views
1

我現在有在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每次創建模型時都必須執行此操作。插入到集合時,模型是否有自動創建的方法?

+0

模型實例保存到集合後,您不需要創建索引。你看到你需要做什麼?當你定義模型時,它應該完成一次。 – 2012-04-22 20:52:42

+0

創建模型後,會創建BSON ID,但是當我試圖在集合上運行查詢時(例如上面列出的),它會拋出「無法找到特殊索引」錯誤。 – joshcollie 2012-04-22 21:16:24

回答

1

不是沒有辦法。

您必須創建索引(不只是地理)一次,才能使用它。

+0

無論如何,模型可以在創作上做到這一點嗎?它創建BSON ID但不允許查詢位置。感謝您的信息。 – joshcollie 2012-04-22 21:14:59

+0

我相信我遇到的問題是因爲我現在每次都會丟棄集合並忘記我將不得不再次運行'rake db:mongoid:create_indexes'。我運行一次後,我不再收到此錯誤。 – joshcollie 2012-04-24 14:43:04

相關問題