- 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:
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.
Deprecated: When using MongoDB 2.6, you can drop the duplicate entries
for unique indexes that are defined for a column that might
already have duplicate values by specifying the drop_dups option:
The drop_dups option has been removed as of MongoDB 3.0.
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:
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: