Navigation

Indexing

The driver provides the ability to create, drop and view indexes on a collection through the indexes attribute:

client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'music')
client[:bands].indexes
# => #<Mongo::Index::View:0x000055e2822b9318 @collection=#<Mongo::Collection:0x660 namespace=music.bands>, @batch_size=nil, @options={}>

Creating Indexes

Indexes can be created one at a time, or several can be created in a single operation. When creating multiple indexes on MongoDB 3.0 and later, the indexes are created in parallel; on earlier versions they are created sequentially.

To create a single index, use indexes#create_one, passing the key specification as the first argument and options as the second argument:

client[:bands].indexes.create_one(genre: 1)

client[:bands].indexes.create_one(
  { name: 1 },
  unique: true, expire_after: 120,
)

To create multiple indexes, use indexes#create_many which accepts an array of index specifications. Unlike create_one, each index specification is a hash with the key key mapped to the key specification and the options being specified on the top level.

client[:bands].indexes.create_many([
  { key: { genre: 1 } },
  { key: { name: 1 }, unique: true, expire_after: 120 },
])

The following is a full list of the available options that can be added when creating indexes. These options mirror the options supported by the createIndex command.

Option Description
:background Either true or false. Tells the index to be created in the background.
:expire_after Number of seconds to expire documents in the collection after.
:name The name of the index.
:sparse Whether the index should be sparse or not, either true or false.
:storage_engine The name of the storage engine for this particular index.
:version The index format version to use.
:default_language The default language of text indexes.
:language_override The field name to use when overriding the default language.
:text_version The version format for text index storage.
:weights A document specifying fields and weights in text search.
:sphere_version The 2d sphere index version.
:bits Sets the maximum boundary for latitude and longitude in the 2d index.
:max Maximum boundary for latitude and longitude in the 2d index.
:min Minimum boundary for latitude and longitude in the 2d index.
:bucket_size The number of units within which to group the location values in a geo haystack index.
:partial_filter_expression A filter for a partial index.

Dropping Indexes

To drop an index, call indexes#drop_one or indexes#drop_all.

# Drops the name_1 index.
client[:bands].indexes.drop_one( 'name_1' )

# Drops all indexes in the collection.
client[:bands].indexes.drop_all

Listing Indexes

To list the indexes, iterate the indexes object:

client[:bands].indexes.each do |index_spec|
  p index_spec
  # {"v"=>2, "key"=>{"_id"=>1}, "name"=>"_id_"}
  # {"v"=>2, "key"=>{"genre"=>1}, "name"=>"genre_1"}
  # {"v"=>2, "unique"=>true, "key"=>{"name"=>1}, "name"=>"name_1",
  #  "expireAfterSeconds"=>120}
end

Each iteration returns an index specification as returned by the listIndexes command.

Note

The shape and contents of the index specifications returned by this method may change from one version of MongoDB to another.

←   Monitoring Collations  →