2012-04-22 13 views
1

私は現在のようなRuby on RailsアプリケーションでMongoidモデルを持っている:私はMongoDBはジオロケーションデータの特殊インデックスを自動的に生成できますか?

listens = Listen.where(:loc => {"$within" => {"$centerSphere" => [location, (radius.fdiv(6371))]}}) 

例えば、コレクションを照会しようとすると、私はエラー(場所が空白にされている

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 

返されていますうち、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てインデックスを作成作成することができます知っている)が返されていませんが、私はワシントン州ませんモデルが作成されるたびにこれを行う必要があります。モデルがコレクションに挿入すると自動的にこれを作成する方法はありますか?

+0

モデルインスタンスをコレクションに保存した後にインデックスを作成する必要はありません。あなたがしなければならないことは、あなたが見ていることですか?モデルを定義するときに一度実行する必要があります。 –

+0

モデルを作成した後、BSON IDが作成されますが、上記のようなコレクションに対してクエリを実行しようとすると、「特殊インデックスが見つかりません」というエラーがスローされます。 – joshcollie

答えて

1

いいえありません。

インデックス(ジオだけでなく)を一度作成して使用する必要があります。

+0

作成時にモデルがこれを行うことができますか? BSON IDを作成しますが、ロケーションの照会はできません。情報のおかげで。 – joshcollie

+0

私が直面していた問題は、何度もコレクションを削除し、 'rake db:mongoid:create_indexes'を再度実行する必要があることを忘れるためです。私はこれを一度実行した後、私はもうこのエラーを受け取りません。 – joshcollie

関連する問題