joshcollie
joshcollie

Reputation: 481

Can MongoDB automatically generate special indexes for geolocation data?

I currently have a Mongoid model in a Ruby on Rails application as such:

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

When I try to query the collection for example

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

I am returned the error (locations have been blanked out, the X's are not returned)

Mongo::OperationFailure (can't find special index: 2d for: { loc: { $within: { $centerSphere: [ [ XX.XXXXXXX, X.XXXXXXX ], 0.0001569612305760477 ] } } }):

I know I can create the indexed through a rake task such as rake db:mongoid:create_indexes but I don't want to have to do this every time a model is created. Is there any way for the model to create this automatically on insert to the collection?

Upvotes: 1

Views: 949

Answers (1)

RameshVel
RameshVel

Reputation: 65877

Nope there is no way.

You must create indexes (not just Geo) once, to use it.

Upvotes: 1

Related Questions