Menu Docs
Página inicial do Docs
/ / /
Driver Ruby MongoDB
/

Indexação

Nesta página

  • Criar índices
  • Eliminando índices
  • Listando índices

O driver fornece a capacidade de criar, eliminar e visualizaríndices em uma collection por meio do atributo indexes :

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={}>

Os índices podem ser criados um de cada vez ou vários podem ser criados em uma única operação. Ao criar múltiplos índices no MongoDB 3,0 e posterior, os índices são criados em paralelo; em versões anteriores, eles são criados sequencialmente.

Para criar um único índice, use indexes#create_one , passando a especificação da chave como o primeiro argumento e as opções como o segundo argumento:

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

Para criar múltiplos índices, utilize o indexes#create_many que aceita uma matriz de especificações de índice. Ao contrário create_one, cada especificação de índice é um hash com a chave key mapeada para a especificação de chave e as opções sendo especificadas no nível superior.

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

A seguir está uma lista completa das opções disponíveis que podem ser adicionadas ao criar índices. Estas opções espelham as opções suportadas pelo comando createIndex.

Opção
Descrição
:background
true ou false. Informa o índice a ser criado em segundo plano.
:expire_after
Número de segundos para expirar o documento na collection depois.
:name
O nome do índice.
:sparse
Se o índice deve ser esparso ou não, true ou false.
:storage_engine
O nome do storage engine para este índice específico.
:version
A versão do formato de índice a ser usada.
:default_language
O idioma padrão dos índices de texto.
:language_override
O nome do campo a ser usado ao substituir o idioma padrão.
:text_version
O formato de versão para armazenamento de índice de texto.
:weights
Um documento que especifica campos e pesos na pesquisa de texto.
:sphere_version
A versão 2d do índice de esferas.
:bits
Define o limite máximo para latitude e longitude no índice 2d.
:max
Limite máximo para latitude e longitude no índice 2d.
:min
Limite mínimo para latitude e longitude no índice 2d.
:bucket_size
O número de unidades dentro das quais agrupar os valores de localização em um índice geo haystack.
:partial_filter_expression
Um filtro para um índice parcial.
:hidden
Um booleano especificando se o índice deve ser ocultado; um índice oculto é aquele que existe na collection, mas não será usado pelo planejador de query.

Nas versões 4.4 e mais recentes do servidor MongoDB, a opção :commit_quorum pode ser especificada na criação do índice. Essa opção difere de outras opções de índice porque determina o comportamento do servidor durante a criação do índice, em vez de determinar o comportamento de um índice individual.

A opção :commit_quorum especifica quantos membros votantes e portadores de dados de um conjunto de réplicas devem concluir a construção do índice antes que o índice esteja pronto. Os valores possíveis são inteiros (0 ao número de membros votantes portadores de dados do conjunto de réplicas), "majority" ou "votingMembers".

Para especificar :commit_quorum ao criar um índice, adicione outra opção ao segundo argumento do método indexes#create_one :

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

Para especificar opções de criação ao criar vários índices, adicione um Hash especificando :commit_quorum como elemento final à array de índices passados para indexes#create_many. Observe que este Hash DEVE ser o elemento final na Matriz.

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

Para eliminar um índice, chame indexes#drop_one ou 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

Para listar os índices, repita o objeto indexes :

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

Cada iteração retorna uma especificação de índice conforme retornada pelo comando listIndexes .

Observação

A forma e o conteúdo das especificações de índice retornadas por este método podem mudar de uma versão do MongoDB para outra.

Voltar

Collections