db.collection.createIndexes()
MongoDB com drivers
Esta página documenta um método mongosh
. Para ver o método equivalente em um driver MongoDB, consulte a página correspondente da sua linguagem de programação:
Definição
db.collection.createIndexes( [ keyPatterns ], options, commitQuorum )
Cria um ou mais índices em uma coleção.
Para minimizar o impacto da criação de um índice em conjunto de réplicas e clusters fragmentados, use um procedimento de compilação de índice contínuo, conforme descrito em Rolling Index Builds on Replica Sets.
db.collection.createIndexes()
recebe os seguintes parâmetros:ParâmetroTipoDescriçãokeyPatterns
documento
Um array contendo documentos de especificação de índice. Cada documento contém pares de campo e valor, onde o campo é a chave do índice e o valor descreve o tipo de índice para aquele campo. Para um índice ascendente em um campo, especifique um valor de
1
; para índice descendente, especifique um valor de-1
.O MongoDB suporta vários tipos de índice diferentes, incluindo índices de texto, geoespacial e hash . Consulte os tipos de índice para obter mais informações.
Alterado na versão 4.2: Os índices curinga do MongoDB 4.2 suportam cargas de trabalho em que os usuários query nos campos ou uma grande variedade de campo em uma collection:
Para criar um índice curinga em todos os campos e subcampos de um documento, especifique
{ "$**" : 1 }
como a chave do índice. Não é possível especificar uma chave de índice descendente ao criar um índice curinga.Você também pode incluir ou excluir campos específicos e seus subcampos do índice utilizando o parâmetro opcional
wildcardProjection
.Os índices curinga omitem o campo
_id
por padrão. Para incluir o campo_id
no índice curinga, você deve explicitamente incluí-lo no documentowildcardProjection
:{ "wildcardProjection" : { "_id" : 1, "<field>" : 0|1 } } Com exceção de incluir explicitamente o campo
_id
, não é possível combinar declarações de inclusão e exclusão no documentowildcardProjection
.Você pode criar um índice curinga em um campo específico e seus subcaminhos especificando o caminho completo para esse campo como a chave de índice e anexando
"$**"
ao caminho:{ "path.to.field.$**" : 1 }
Não é possível especificar uma chave de índice descendente ao criar um índice curinga.
A sintaxe do índice curinga específico do caminho é incompatível com a opção
wildcardProjection
. Você não pode especificar inclusões ou exclusões adicionais no caminho especificado.
A chave de índice curinga deve usar uma das sintaxes listadas acima. Por exemplo, não é possível especificar uma chave de índice composto. Para obter documentação mais completa sobre índices curinga, incluindo restrições à sua criação, consulte Restrições de índices curinga.
O
mongod
featureCompatibilityVersion deve ser4.2
para criar índices curinga. Para obter instruções sobre como definir o FCV, consulte Definir versão de compatibilidade do recurso em sistemas do MongoDB 6.0.Para obter mais informações sobre como criar índices curinga, consulte Índices curinga.
options
documento
Opcional. Um documento que contém um conjunto de opções que controla a criação dos índices. Consulte Opções para detalhes.
inteiro ou string
Opcional. O número mínimo de nós do conjunto de réplicas de votação contendo dados (ou seja, commit quorum), incluindo o primário, que deve relatar uma construção de índice bem-sucedida antes que o primário marque o
indexes
como pronto. Um nó"votante" é qualquer nó do conjunto de réplicas em quemembers[n].votes
é maior que0
.suporta os seguintes valores:
"votingMembers"
- todos os membros do conjunto de réplicas de votos com dados (Padrão)."majority"
- uma maioria simples dos membros do conjunto de réplicas de votos portadores de dados.<int>
- um número específico de membros do conjunto de réplicas de votação com dados.0
- Desativa o comportamento de votação em quórum. Os membros iniciam a construção do índice simultaneamente, mas não votam nem esperam pelo quorum antes de concluírem a construção do índice. Se você iniciar uma construção de índice com um quorum para o commit de0
, não poderá modificar posteriormente o quorum de confirmação usandosetIndexCommitQuorum
.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Stable API
Ao usar a API estável V1:
Você não pode especificar nenhum dos seguintes campos no documento
options
:background
bucketSize
sparse
storageEngine
Você não pode criar índices geoHaystack ou texto.
Os tipos de índice não suportados acima são ignorados pelo planejador de query no modo strict. Por exemplo, tentar usar um índice
sparse
comcursor.hint()
resultará no seguinte erroBadValue
:planner returned error :: caused by :: hint provided does not correspond to an existing index
Opções
O documento options
contém um conjunto de opções que controlam a criação dos índices. Diferentes tipos de índice podem ter opções adicionais específicas para esse tipo.
Várias opções de índice podem ser especificadas no mesmo documento. Entretanto, se você especificar vários documentos de opção, a operação db.collection.createIndexes()
falhará.
Considere a seguinte operação do db.collection.createIndexes()
:
db.collection.createIndexes( [ { "a": 1 }, { "b": 1 } ], { unique: true, sparse: true, expireAfterSeconds: 3600 } )
Se a especificação de opções tivesse sido dividida em vários documentos como este: { unique: true }, { sparse: true, expireAfterSeconds: 3600 }
, a operação de criação do índice teria falhado.
Importante
Quando você especifica opções para db.collection.createIndexes()
, elas se aplicam a todos os índices especificados. Por exemplo, se você especificar uma opção de agrupamento, todos os índices criados o incluirão.
db.collection.createIndexes()
retornará um erro se você tentar criar índices com opções incompatíveis ou muitos argumentos. Consulte as descrições das opções para obter mais informações.
Opções para todos os tipos de índice
As opções a seguir estão disponíveis para todos os tipos de índice, a menos que especificado de outra forma:
Parâmetro | Tipo | Descrição | |
---|---|---|---|
| booleano | Opcional. Especifica que cada índice especificado no array Especifique A opção está indisponível para índices de hasheados. | |
| string | Opcional. O nome do índice. Se não for especificado, o MongoDB gera um nome de índice concatenando os nomes dos campos indexados e a ordem de classificação. ObservaçãoAlterado no MongoDB 4,2O MongoDB remove o limite de comprimento do nome do índice de no máximo 127 bytes. As opções especificadas em | |
| documento | Opcional. Se especificado, os índices fazem referência apenas a documentos que correspondem à expressão de filtro. Consulte Índices parciais para obter mais informações. Uma expressão de filtro pode incluir:
Você pode especificar uma opção | |
| booleano | Opcional. Se Os seguintes tipos de índice são escassos por padrão e ignoram esta opção: Para um índice composto que inclui DicaOs índices parciais oferecem um superconjunto da funcionalidade dos índices esparsos. A menos que seu aplicativo tenha um requisito específico, use índices parciais em vez de índices esparsos. | |
| inteiro | Opcional. Especifica um valor, em segundos, como um tempo de vida(TTL) para controlar por quanto tempo o MongoDB retém documentos na coleção. Esta opção se aplica somente aos índices TTL. Consulte Expirar dados de coleções configurando TTL para obter mais informações. Se você usa índices TTL criados antes do MongoDB 5.0 ou se deseja sincronizar dados criados no MongDB 5.0 com um pré-5.0 instalação, consulte Índices configurados usando NaN para evitar problemas de configuração incorreta. O valor | |
booleano | Opcional. Um sinalizador que determina se o índice está hidden do planejador de queries. Um índice oculto não é avaliado como parte da seleção do plano de query. O padrão é Para usar a opção | ||
| documento | Opcional. Permite que os usuários configurem o mecanismo de armazenamento para os índices criados. A opção
As opções de configuração do mecanismo de armazenamento especificadas ao criar índices são validadas e registradas no oplog durante a replicação para suportar conjuntos de réplicas com membros que usam mecanismos de armazenamento diferentes. |
Opção para agrupamento
Parâmetro | Tipo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| documento | Opcional. Especifica o agrupamento do índice. A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de strings, como regras para letras maiúsculas e marcas de acento. Se você especificou um agrupamento no nível da coleção, então:
A opção de agrupamento tem a seguinte sintaxe:
Ao especificar agrupamento, o campo |
Os índices a seguir oferecem suporte apenas à comparação binária simples e não oferecem suporte ao agrupamento:
índices de texto ,
Índices 2d e
índices do geoHaystack .
Dica
Para criar um índice text
, 2d
ou um índice geoHaystack
em uma collection que tem um agrupamento não simples, você deve especificar explicitamente {collation: {locale: "simple"} }
ao criar o índice.
Agrupamento e uso do índice
Se você especificou um agrupamento no nível da coleção, então:
Se você não especificar um agrupamento ao criar o índice, o MongoDB criará o índice com o agrupamento padrão da coleção.
Se você especificar um agrupamento ao criar o índice, o MongoDB criará o índice com o agrupamento especificado.
Dica
Ao especificar um agrupamento strength
de 1
ou 2
, você pode criar um índice que não diferencia maiúsculas de minúsculas. O índice com um agrupamento strength
de 1
não diferencia letras diacríticas e maiúsculas de minúsculas.
Você pode criar vários índices na(s) mesma(s) chave(s) com diferentes agrupamentos. Para criar indexes com o mesmo padrão de chave, mas com agrupamentos diferentes, você deve fornecer nomes de índice exclusivos.
Para usar um índice para comparações de strings, uma operação também deve especificar o mesmo agrupamento. Ou seja, um índice com ordenação não pode suportar uma operação que executa comparações de strings nos campos indexados se a operação especificar uma ordenação diferente.
Aviso
Porque os índices configurados com agrupamento usam ICU. chaves de agrupamento para obter a ordem de classificação, chaves de índice com reconhecimento de agrupamento pode ser maior do que as chaves de índice para índices sem agrupamento.
Por exemplo, a coleta myColl
possui um índice em um campo de sequência category
com o código do idioma de ordenação "fr"
.
db.myColl.createIndex( { category: 1 }, { collation: { locale: "fr" } } )
A seguinte operação de consulta, que especifica o mesmo agrupamento que o índice, pode usar o índice:
db.myColl.find( { category: "cafe" } ).collation( { locale: "fr" } )
No entanto, a seguinte operação de consulta, que por padrão usa o agrupador binário "simples", não pode usar o índice:
db.myColl.find( { category: "cafe" } )
Para um índice composto em que as chaves de prefixo do índice não são strings, matrizes e documentos incorporados, uma operação que especifica um agrupamento diferente ainda pode usar o índice para dar suporte a comparações nas chaves de prefixo do índice.
Por exemplo, a coleta myColl
possui um índice composto nos campos numéricos score
e price
e no campo de string category
; o índice é criado com a localidade de ordenação "fr"
para comparações de strings:
db.myColl.createIndex( { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } )
As operações a seguir, que usam agrupamento binário "simple"
para comparações de strings, podem usar o índice:
db.myColl.find( { score: 5 } ).sort( { price: 1 } ) db.myColl.find( { score: 5, price: { $gt: NumberDecimal( "10" ) } } ).sort( { price: 1 } )
A operação a seguir, que usa agrupamento binário "simple"
para comparações de strings no campo category
indexado, pode usar o índice para preencher apenas a parte score: 5
da query:
db.myColl.find( { score: 5, category: "cafe" } )
Importante
As correspondências com chaves de documentos, incluindo chaves de documentos incorporadas, usam uma comparação binária simples. Isto significa que uma query para uma chave como "foo.bár" não corresponderá à chave "foo.bar", independente do valor definido para o parâmetro de força.
Opções para text
Índices
As seguintes opções estão disponíveis apenas para índices de texto:
Parâmetro | Tipo | Descrição |
---|---|---|
| documento | Opcional. Para índices de texto, um documento que contém pares de peso e campo. O peso é um número inteiro que varia de 1 a 99.999 e denota a importância do campo em relação aos outros campos indexados em termos de pontuação. Você pode especificar pesos para alguns ou todos os campos indexados. Consulte Atribuir pesos aos resultados da pesquisa de texto em implantações autogerenciadas para ajustar as pontuações. O valor padrão é Iniciando no MongoDB 5.0, a opção pesos é permitida somente para índices de texto. |
| string | Opcional. Para índices de texto, o idioma que determina a lista de palavras de interrupção e as regras para o stemmer e o tokenizador. Consulte Idiomas de pesquisa de texto em implantações autogerenciadas para os idiomas disponíveis e Especificar idioma padrão para um índice de texto em implantações autogerenciadas para obter mais informações e exemplos. O valor padrão é |
| string | Opcional. Para índices de texto , o nome do campo, nos documentos da coleção, que contém o idioma de substituição do documento. O valor padrão é |
| inteiro | Opcional. O número da versão do índice Para ver as versões disponíveis, consulte Versões. |
Opções para 2dsphere
Índices
A seguinte opção está disponível apenas para índices de 2dsphere:
Parâmetro | Tipo | Descrição |
---|---|---|
| inteiro | Opcional. O número da versão do índice Para ver as versões disponíveis, consulte Versões. |
Opções para 2d
Índices
As opções a seguir estão disponíveis somente para índices 2D:
Opções para geoHaystack
Índices
A seguinte opção está disponível apenas para índices geoHaystack :
Parâmetro | Tipo | Descrição |
---|---|---|
| número | Para índices geoHaystack , especifique o número de unidades dentro das quais agrupar os valores de localização; ou seja, agrupar no mesmo bucket os valores de localização que estão dentro do número especificado de unidades entre si. O valor deve ser maior que 0. |
Observação
Removido no MongoDB 5.0
O MongoDB 5.0 remove o índice geoHaystack obsoleto e o comando geoSearch
. Utilize um índice 2d com $geoNear
ou um dos operadores de query geoespacial suportados.
Atualizar sua instância MongoDB para 5.0 e configurar featureCompatibilityVersion para 5.0
excluirá quaisquer índices geoHaystack preexistentes.
Opções para wildcard
índices
A opção a seguir está disponível somente para índices coringa :
Parâmetro | Tipo | Descrição | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| documento | Opcional. Permite que os usuários incluam ou excluam caminhos do campo específicos do índice curinga. Esta opção só é válida se estiver criando um índice curinga. A opção
O
Os índices curinga omitem o campo
Com exceção de incluir explicitamente o campo As |
Comportamentos
Concurrency
Alterado na versão 4.2.
O MongoDB usa um processo de construção otimizado que obtém e mantém um bloqueio exclusivo na coleção especificada no início e no final da construção do índice. Todas as operações subsequentes na coleção devem aguardar até que createIndexes()
libere o exclusivo trava. createIndexes()
permite intercalar operações de leitura e gravação durante a maior parte da compilação do índice.
Para obter mais informações sobre o comportamento de trava de createIndexes()
, consulte a página Construções de índices em coleções preenchidas.
Recriando um Índice Existente
Se você chamar db.collection.createIndexes()
para um índice ou índices que já existem, o MongoDB não recriará o índice ou índices existentes.
Opções de índice
Opções sem agrupamento e não ocultas
Com exceção da opção de agrupamento, se você criar um índice com um conjunto de opções de índice e tentar recriar o mesmo índice, mas com diferentes opções de índice, o MongoDB não alterará as opções nem recriará o índice.
A opção oculta pode ser alterada sem descartar e recriar o índice. Consulte Opção oculta.
Para alterar as outras opções de índice, descarte o índice existente com db.collection.dropIndex()
antes de executar db.collection.createIndexes()
com as novas opções.
Opção de agrupamento
Você pode criar vários índices na(s) mesma(s) chave(s) com diferentes agrupamentos. Para criar indexes com o mesmo padrão de chave, mas com agrupamentos diferentes, você deve fornecer nomes de índice exclusivos.
Opção oculta
Novidades na versão 4.4.
Para ocultar ou exibir índices existentes, você pode usar os seguintes métodos mongosh
:
Por exemplo,
Para alterar a opção
hidden
para um índice paratrue
, utilize o métododb.collection.hideIndex()
:db.restaurants.hideIndex( { borough: 1, ratings: 1 } ); Para alterar a opção
hidden
para um índice parafalse
, utilize o métododb.collection.unhideIndex()
:db.restaurants.unhideIndex( { borough: 1, city: 1 } );
Índices curinga
Novidades na versão 4.2.
Os índices curinga omitem o campo
_id
por padrão. Para incluir o campo_id
no índice curinga, você deve explicitamente incluí-lo no documentowildcardProjection
:{ "wildcardProjection" : { "_id" : 1, "<field>" : 0|1 } } Com exceção de incluir explicitamente o campo
_id
, não é possível combinar declarações de inclusão e exclusão no documentowildcardProjection
.O
mongod
featureCompatibilityVersion deve ser4.2
para criar índices curinga. Para obter instruções sobre como definir o FCV, consulte Definir versão de compatibilidade do recurso em sistemas do MongoDB 6.0.Os índices curinga não suportam os seguintes tipos de índice ou propriedades:
Observação
Os índices curinga são distintos e incompatíveis com os índices de texto curinga. Os índices curinga não suportam consultas usando o operador
$text
.Para obter a documentação completa sobre restrições de índice curinga, consulte Restrições de índice curinga.
Para obter exemplos de criação de índice curinga, consulte Criar um índice curinga. Para obter a documentação completa sobre índices Curinga, consulte Índices Curinga.
Transações
Você pode criar coleção e indexes dentro de uma transaction distribuída se a transaction não for uma transação de escrita de estilhaço cruzado.
Para usar db.collection.createIndexes()
em uma transação, a transação deve usar preocupação de leitura "local"
. Se você especificar um nível de preocupação de leitura diferente de "local"
, a transação falhará.
Exemplo
Dica
Veja também:
db.collection.createIndex()
para obter exemplos de várias especificações de índice.
Criar índices sem opções
Considere uma coleção restaurants
contendo documentos semelhantes aos seguintes:
{ location: { type: "Point", coordinates: [-73.856077, 40.848447] }, name: "Morris Park Bake Shop", cuisine: "Cafe", borough: "Bronx", }
O exemplo a seguir cria dois índices na coleção restaurants
: um índice ascendente no campo borough
e um índice de 2 esferas no campo location
.
db.restaurants.createIndexes([{"borough": 1}, {"location": "2dsphere"}])
Criar índices com agrupamento especificado
O exemplo seguinte cria dois índices na coleção products
: um índice ascendente no campo manufacturer
e um índice ascendente no campo category
. Ambos os índices usam um agrupamento que especifica a localidade fr
e a força de comparação 2
:
db.products.createIndexes( [ { "manufacturer": 1}, { "category": 1 } ], { collation: { locale: "fr", strength: 2 } })
Para queries ou operações de classificação nas chaves indexadas que usam as mesmas regras de agrupamento, o MongoDB pode usar o índice. Para obter detalhes, consulte Agrupamento e uso de índice.
Criar um Índice Curinga
Novo na versão 4.2: A mongod
featureCompatibilityVersion do deve ser 4.2
para criar índices curinga. Para obter instruções sobre como definir o FCV, consulte Definir versão de compatibilidade do recurso em sistemas do MongoDB 6.0.
Para obter a documentação completa sobre índices Curinga, consulte Índices Curinga.
As seguintes listas listam exemplos de criação de índice coringa:
Crie um índice curinga em vários caminhos do campo específicos
Crie um índice curinga que exclua vários caminhos de campo específicos
Criar um Índice Curinga em um Caminho de Campo Único
Considere uma coleção products_catalog
onde os documentos podem conter um campo product_attributes
. O campo product_attributes
pode conter campos aninhados arbitrários, incluindo documentos incorporados e arrays:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
A seguinte operação cria um índice curinga no campo product_attributes
:
use inventory db.products_catalog.createIndexes( [ { "product_attributes.$**" : 1 } ] )
Com este índice curinga, MongoDB indexa todos os valores escalares de product_attributes
. Se um campo for um documento ou array aninhado, o índice curinga recorrerá ao documento/array e indexará todos os campos escalares no documento/array.
O índice curinga pode suportar queries arbitrárias de campo único no product_attributes
ou um de seus campos aninhados:
db.products_catalog.find( { "product_attributes.superFlight" : true } ) db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt : 20 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
Observação
A sintaxe do índice curinga específico do caminho é incompatível com a opção wildcardProjection
. Consulte a documentação do parâmetro para mais informações.
Crie um Índice Curinga em Todos os Caminhos de Campo
Considere uma coleção products_catalog
onde os documentos podem conter um campo product_attributes
. O campo product_attributes
pode conter campos aninhados arbitrários, incluindo documentos incorporados e arrays:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
A seguinte operação cria um índice curinga em todos os campos escalares (excluindo o campo _id
):
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ] )
Com esse índice curinga, o MongoDB indexa todos os campos escalares para cada documento na coleção. Se um determinado campo for um documento ou array aninhada, o índice curinga recorrerá ao documento/array e indexará todos os campos escalares no documento/array.
O índice criado pode suportar queries em qualquer campo arbitrário dentro de documentos na coleção:
db.products_catalog.find( { "product_price" : { $lt : 25 } } ) db.products_catalog.find( { "product_attributes.elements" : { $eq: "water" } } )
Observação
Os índices curinga omitem o campo _id
por padrão. Para incluir o campo _id
no índice curinga, você deve explicitamente incluí-lo no documento wildcardProjection
. Consulte a documentação dos parâmetros para mais informações.
Crie um índice curinga em vários caminhos do campo específicos
Considere uma coleção products_catalog
onde os documentos podem conter um campo product_attributes
. O campo product_attributes
pode conter campos aninhados arbitrários, incluindo documentos incorporados e arrays:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
A seguinte operação cria um índice curinga e usa a opção wildcardProjection
para incluir somente valores escalares dos campos product_attributes.elements
e product_attributes.resistance
no índice.
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.elements" : 1, "product_attributes.resistance" : 1 } } )
Enquanto o padrão de chave "$**"
abrange todos os campos do documento, o campo wildcardProjection
limita o índice apenas aos campos incluídos. Para obter a documentação completa sobre wildcardProjection
, consulte Opções para índices wildcard
.
Se um campo for um documento ou array aninhado, o índice curinga recorrerá ao documento/array e indexará todos os campos escalares no documento/array.
O índice criado pode suportar queries em qualquer campo escalar incluído no wildcardProjection
:
db.products_catalog.find( { "product_attributes.elements" : { $eq: "Water" } } ) db.products_catalog.find( { "product_attributes.resistance" : "Bludgeoning" } )
Observação
Os índices curinga não suportam a combinação de instruções de inclusão e exclusão no documento wildcardProjection
, exceto quando se inclui explicitamente o campo _id
. Para obter mais informações sobre wildcardProjection
, consulte a documentação do parâmetro.
Crie um índice curinga que exclua vários caminhos de campo específicos
Considere uma coleção products_catalog
onde os documentos podem conter um campo product_attributes
. O campo product_attributes
pode conter campos aninhados arbitrários, incluindo documentos incorporados e arrays:
db.products_catalog.insertMany( [ { _id : ObjectId("5c1d358bf383fbee028aea0b"), product_name: "Blaster Gauntlet", product_attributes: { price: { cost: 299.99, currency: "USD" } } }, { _id: ObjectId("5c1d358bf383fbee028aea0c"), product_name: "Super Suit", product_attributes: { superFlight: true, resistance: [ "Bludgeoning", "Piercing", "Slashing" ] } } ] )
A seguinte operação cria um índice curinga e utiliza o documento wildcardProjection
para indexar todos os campos escalares para cada documento na coleção, excluindo os campos product_attributes.elements
e product_attributes.resistance
:
use inventory db.products_catalog.createIndexes( [ { "$**" : 1 } ], { "wildcardProjection" : { "product_attributes.elements" : 0, "product_attributes.resistance" : 0 } } )
Enquanto o padrão de chave "$**"
abrange todos os campos no documento, o campo wildcardProjection
exclui os campos especificados do índice. Para obter a documentação completa sobre wildcardProjection
, consulte Opções para índices wildcard
.
Se um campo for um documento ou array aninhado, o índice curinga recorrerá ao documento/array e indexará todos os campos escalares no documento/array.
O índice criado pode suportar queries em qualquer campo escalar exceto aquelas excluídas por wildcardProjection
:
db.products_catalog.find( { "product_attributes.maxSpeed" : { $gt: 25 } } ) db.products_catalog.find( { "product_attributes.superStrength" : true } )
Observação
Os índices curinga não suportam a combinação de instruções de inclusão e exclusão no documento wildcardProjection
, exceto quando se inclui explicitamente o campo _id
. Para obter mais informações sobre wildcardProjection
, consulte a documentação do parâmetro.
Criar índices com quorum para o commit
Observação
Exige featureCompatibilityVersion 4.4+
Cada mongod
no conjunto de réplica ou agrupamento fragmentado deve ter featureCompatibilityVersion configurado para pelo menos 4.4
para iniciar construções de índice simultaneamente entre membros do conjunto de réplicas.
Construir índices em um conjunto de réplicas ou cluster particionado é feito simultaneamente em todos os membros do conjunto de réplicas que contêm dados. Para clusters fragmentados, a construção de índices ocorre somente em fragmentos que contêm dados para a coleção que está sendo indexada. O primário requer um número mínimo de membros de dados voting
(ou seja, quórum para a confirmação), incluindo ele próprio, que deve concluir a construção antes de marcar o índice como pronto para uso. Consulte Construções de Índice em Ambientes Replicados para obter mais informações.
Especifique o parâmetro commitQuorum para a operação createIndexes()
para definir o número mínimo de membros votantes portadores de dados (ou seja, quorum de commit), incluindo o primário, que deve concluir a construção do índice antes que o primário marque os índices como prontos. O commit quorum padrão é votingMembers
ou todos os nós do conjunto de réplicas votantes portadores de dados.
A seguinte operação cria um índice com um quórum para a confirmação de "majority"
:
db.getSiblingDB("examples").invoices.createIndexes( { "invoices" : 1 }, { }, "majority" )
A construção do índice de notas primário ficou pronta somente após a maioria simples dos membros votantes portadores de dados " votarem em" para confirmar a criação do índice. Para obter mais informações sobre a criação de índices e o processo de votação, consulte Construções de índices em ambientes replicados.
Criar múltiplos índices
Crie uma collection cakeSales
que contenha vendas de bolo nos estados da Califórnia (CA
) e de Washington (WA
):
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
O exemplo seguinte cria múltiplos índices na coleção cakeSales
:
db.cakeSales.createIndexes( [ { "type": 1 }, { "orderDate": 1 }, { "state": 1 }, { "orderDate": 1, "state": -1 } ] )
Os três primeiros índices estão em campos únicos e em ordem crescente (1
).
O último índice está em orderDate
em ordem crescente (1
) e state
em ordem decrescente (-1
).
Informações adicionais
Para obter informações adicionais sobre índices, consulte:
A seção Índices deste manual contém a documentação completa sobre índices e indexação no MongoDB.
db.collection.getIndexes()
para visualizar as especificações dos índices existentes para uma coleção.Índices de texto em implantações autogerenciadas para obter detalhes sobre como criar índices
text
.Índices Geoespaciais para queries geoespaciais.
Índices TTL para expiração de dados.