- Schema Configuration >
- Index Management
Index Management¶
On this page
Specifying Indexes¶
You can define indexes on documents using the index macro. Provide the key for the index along with a direction. Additional options can be supplied in the second options hash parameter:
You can define indexes on embedded document fields as well:
You can index on multiple fields and provide direction:
Indexes can be sparse:
For geospatial indexes, make sure the field being indexed is of type Array:
Indexes can be scoped to a specific database:
Mongoid can define indexes on “foreign key” fields for associations. This only works on the association macro that the foreign key is stored on:
Deprecated: In MongoDB 4.0 and earlier, users could control whether to build indexes
in the foreground (blocking) or background (non-blocking, but less efficient) using the
background
option.
The default value of background
is controlled by Mongoid’s
background_indexing
configuration option.
The background
option has no effect as of MongoDB 4.2.
Index Management Rake Tasks¶
When you want to create the indexes in the database, use the provided
db:mongoid:create_indexes
Rake task:
Mongoid also provides a Rake task to delete all secondary indexes.
Note: the output of these Rake tasks goes to the default logger configured
by Rails. This is usually a file like log/development.log
and not standard
output.
These create/remove indexes commands also works for just one model by running in Rails console:
Using Rake Tasks With Non-Rails Applications¶
Mongoid’s Rake tasks are automatically loaded in Rails applications using
Mongoid. When using Mongoid with a non-Rails application, these tasks must
be loaded manually. This can be achieved by loading them in the Rakefile and
providing an :environment
task to load your application’s models:
If your application uses Bundler, you can require bundler/setup
instead of
explicitly requiring mongoid
: