Indexação
Nesta página
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={}>
Criar índices
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. |
A opção :commit_quorum
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' }, ])
Eliminando índices
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
Listando índices
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.