Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

createIndexes

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Campos de comando
  • Considerações
  • Nomes de índice
  • Conjuntos de Réplicas e Clusters Compartilhados
  • Tipos de agrupamento e índice
  • Stable API
  • Comportamento
  • Concurrency
  • Limite de uso da memória
  • Opções de índice
  • Índices curinga
  • Transações
  • Quorum para o Commit Comparado com Write Concern
  • Exemplo
  • Criar um Índice Curinga
  • Criar Índice com Commit Quorum
  • Saída
createIndexes

Constrói um ou mais índices em uma coleção.

Dica

Em mongosh, este comando também pode ser executado por meio dos métodos de assistente db.collection.createIndex() e db.collection.createIndexes() .

Os métodos auxiliares são práticos para os usuários mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Esse comando 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 é suportado em todos os clusters do MongoDB Atlas . Para obter informações sobre o suporte do Atlas para 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

O comando createIndexes utiliza o seguinte formulário:

db.runCommand(
{
createIndexes: <collection>,
indexes: [
{
key: {
<key-value_pair>,
<key-value_pair>,
...
},
name: <index_name>,
<option1>,
<option2>,
...
},
{ ... },
{ ... }
],
writeConcern: { <write concern> },
commitQuorum: <int|string>,
comment: <any>
}
)

O comando createIndexes utiliza os seguintes campos:

Campo
Tipo
Descrição
createIndexes
string
A coleção para a qual criar índices.
indexes
array
Especifica os índices a serem criados. Cada documento na array especifica um índice separado.
writeConcern
documento
Opcional. Um documento que expressa o write concern. Omitir para usar o write concern padrão.
commitQuorum
inteiro ou string

Opcional. O número mínimo de nós do conjunto de réplicas contendo dados (ou seja, quorum para o commit), incluindo o primary, que deve relatar uma construção de índice bem-sucedida antes que o primary marque o indexes como pronto.

A partir do MongoDB v5.0, você pode retomar algumas construções de índice interrompido quando o commit quorum is set para "votingMembers".

Nós do conjunto de réplicas em um quorum para o commit devem ter members[n].buildIndexes definido como true. Se algum nó de votação tiver members[n].buildIndexes definido como false, você não poderá usar o "votingMembers" commit quorum padrão. Configure todos os nós com members[n].buildIndexes definido como true ou selecione um commit quorum diferente.

suporta os seguintes valores:

  • "votingMembers" - todos os membros do conjunto de réplicas de votos com dados (Padrão). Um membro "votante" é qualquer membro do conjunto de réplicas em que members[n].votes é maior que 0.

  • "majority" - uma maioria simples de membros do conjunto de réplicas com dados.

  • <int> - um número específico de membros do conjunto de réplicas 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 de 0, não poderá modificar posteriormente o quorum de confirmação usando setIndexCommitQuorum.

  • Um nome de tag do conjunto de réplicas.

comment
any

Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:

Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).

Cada documento no array indexes contém os seguintes campos:

Campo
Tipo
Descrição
key
documento

Especifica os campos do índice. Para cada campo, especifique um par chave-valor no qual a chave é o nome do campo a ser indexado e o valor é a direção do índice ou o tipo de índice. Se especificar direção, especifique 1 para ascendente ou -1 para descendente.

O MongoDB suporta vários tipos de índice diferentes, incluindo:

Consulte os tipos de índice para obter mais informações.

Índices Curinga suportam cargas de trabalho em que os usuários fazem query nos campos personalizados ou uma grande variedade de campos em uma coleção:

  • Você pode criar um índice curinga em um campo específico e seus subcaminhos ou em todos os campos de um documento.

    Para obter detalhes, consulte Índices Curinga.

name
string
Um nome que identifica exclusivamente o índice.
unique
booleano

Opcional. Cria um índice único para que a coleção não aceite a inserção ou atualização de documentos em que o valor da chave do índice corresponda a um valor existente no índice.

Especifique true para criar um índice único. O valor padrão é false.

A opção está indisponível para índices de hasheados.

partialFilterExpression
documento

Opcional. Se especificado, o índice só faz referência a documentos que correspondam à expressão de filtro. Consulte Índices parciais para obter mais informações.

Uma expressão de filtro pode incluir:

Se você estiver utilizando o Client-Side Field Level Encryption ou o Queryable Encryption, um partialFilterExpression não poderá fazer referência a um campo criptografado.

Você pode especificar uma opção partialFilterExpression para todos os tipos de índiceMongoDB.

sparse
booleano

Opcional. Se true, o índice referencia apenas documentos com o campo especificado. Esses índices usam menos espaço, mas se comportam de forma diferente em algumas situações (especialmente em tipos). O valor padrão é false. Consulte Analisar índices para obter mais informações.

Os seguintes tipos de índice são escassos por padrão e ignoram esta opção:

Para um índice composto que inclui 2dsphere chave(s) de índice junto com chaves de outros tipos, somente os campos de índice 2dsphere determinam se o índice faz referência a um documento.

O MongoDB fornece a opção de criar índices parciais. Eles oferecem um superconjunto de funcionalidades de índices esparsos e são preferidos.

expireAfterSeconds
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 expireAfterSeconds do índice TTL deve estar dentro de 0 e 2147483647 inclusive.

booleano

Opcional. Uma bandeira que determina se o índice é oculto do planejador de query. Um índice oculto não é avaliado como parte da seleção do plano de query.

O padrão é false.

storageEngine
documento

Opcional. Permite que os usuários configurem o mecanismo de armazenamento por índice ao criar um índice.

A opção storageEngine deve receber o seguinte formulário:

storageEngine: { <storage-engine-name>: <options> }

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.

weights
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 é 1.
default_language
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 é english.

language_override
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 é language. Consulte Especificar o idioma padrão para um índice de texto em implantações autogerenciadas para obter um exemplo.
textIndexVersion
inteiro

Opcional. O número da versão do índice text. Os usuários podem usar essa opção para substituir o número da versão padrão.

Para ver as versões disponíveis, consulte Versões de índice de texto em implantações autogerenciadas.

2dsphereIndexVersion
inteiro

Opcional. O número da versão do índice 2dsphere. Os usuários podem usar essa opção para substituir o número da versão padrão.

Para as versões disponíveis, consulte Índices do 2dsphere.

bits
inteiro

Opcional. Para índices 2d, o número de precisão do valor geohash armazenado dos dados de localização.

O valor de bits varia de 1 a 32, inclusive. O valor padrão é 26.

min
número
Opcional. Para índices 2d, o limite inferior inclusivo para os valores de longitude e latitude. O valor padrão é -180.0.
max
número
Opcional. Para índices 2d, o limite de inclusão superior para os valores de longitude e latitude. O valor padrão é 180.0.
collation
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:

  • 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.

A opção de agrupamento tem a seguinte sintaxe:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Ao especificar agrupamento, o campo locale é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.

wildcardProjection
documento

Opcional.

Permite que os usuários incluam ou excluam caminho do campo específicos de um índice curinga usando o padrão de chave { "$**" : 1}. Essa opção só é válida se você criar um índice curinga em todos os campos do documento. Você não pode especificar essa opção ao criar um índice curinga em um caminho de campo específico e seus subcampos, por exemplo { "path.to.field.$**" : 1 }

A opção wildcardProjection tem o seguinte formato:

wildcardProjection: {
"path.to.field.a" : <value>,
"path.to.field.b" : <value>
}

O <value> pode ser um dos seguintes:

  • 1 ou true para incluir o campo no índice curinga.

  • 0 ou false para excluir o campo do índice curinga.

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 :

{
"wildcardProjection" : {
"_id" : 1,
"<field>" : 0|1
}
}

Todas as declarações no documento wildcardProjection devem ser declarações de inclusão ou de exclusão. Você também pode incluir o campo _id com declarações de exclusão. Esta é a única exceção à regra.

mongosh fornece os métodos db.collection.createIndex() e db.collection.createIndexes() como wrappers para o comando createIndexes.

O MongoDB não permite a criação de índices da versão 0.

O comando createIndexes e auxiliares mongosh, db.collection.createIndex() e db.collection.createIndexes() relatam um erro se você criar um índice com um nome e, em seguida, tentar criar o mesmo índice novamente, mas com outro nome.

{
"ok" : 0,
"errmsg" : "Index with name: x_1 already exists with a different name",
"code" : 85,
"codeName" : "IndexOptionsConflict"
}

Em versões anteriores, o MongoDB não recriava o índice, mas retornava um objeto de resposta com valor ok de 1 e uma observação de que o índice não foi recriado. Por exemplo:

{
"numIndexesBefore" : 2,
"numIndexesAfter" : 2,
"note" : "all indexes already exist",
"ok" : 1
}

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.

Para iniciar uma construção de índice com um quórum para a confirmação não padrão, especifique o commitQuorum.

Use o comando setIndexCommitQuorum para modificar o quórum para a confirmação de uma compilação de índice em andamento.

Para minimizar o impacto da criação de um índice em conjunto de réplicas e clusters fragmentados, use um procedimento de rolling de índices de construçã, conforme descrito em Construções contínuas de índices em replica sets.

Os índices a seguir oferecem suporte apenas à comparação binária simples e não oferecem suporte ao agrupamento:

Dica

Para criar um índice text ou 2d em uma collection que tem um agrupamento não simples, você deve especificar explicitamente {collation: {locale: "simple"} } ao criar o índice.

Ao usar a API estável V1:

  • Você não pode especificar nenhum dos seguintes campos na array indexes:

    • 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 com cursor.hint() resultará no seguinte erro BadValue :

    planner returned error :: caused by :: hint provided does not
    correspond to an existing index

Para featureCompatibilityVersion "4.2", createIndexes usa um processo de compilação otimizado que obtém e mantém um bloqueio exclusivo na coleção especificada no início e no final da compilação de índice. Todas as operações subsequentes na coleção devem aguardar até que createIndexes libere o bloqueio exclusivo. createIndexes permite intercalar operações de leitura e gravação durante a maior parte da compilação do índice.

No caso de featureCompatibilityVersion "4.0", createIndexes usa o processo de construção do índice pré-4.2 que, por padrão, obtém um bloqueio exclusivo no banco de dados pai por toda a duração do processo de construção. O processo de compilação pré-4.2 bloqueia todas as operações no banco de dados e todas as suas coleções até que a operação seja concluída. Os índices background não possuem bloqueio exclusivo.

Para obter mais informações sobre o comportamento de trava de createIndexes, consulte a página Construções de índices em coleções preenchidas.

Importante

Se um nó de votação com dados se tornar inacessível e o commitQuorum estiver definido como votingMembers padrão, as compilações de índice poderão ficar suspensas até que o nó volte a ficar on-line.

O createIndexes permite criar um ou mais índices em uma coleção. createIndexes usa uma combinação de memória e arquivos temporários no disco para concluir as compilações de índice. O limite padrão de uso de memória para createIndexes é de 200 megabytes, compartilhado entre todos os índices criados com um único comando createIndexes. Após o limite de memória ser atingido, o createIndexes utiliza arquivos de disco temporários em um subdiretório denominado _tmp dentro do diretório --dbpath para concluir a compilação.

Você pode substituir o limite de memória configurando o parâmetro do servidor maxIndexBuildMemoryUsageMegabytes. A definição de um limite de memória maior pode resultar na conclusão mais rápida das compilações de índices. No entanto, um limite muito alto em relação à RAM não utilizada no seu sistema pode resultar no esgotamento da memória e no desligamento do servidor.

A opção oculta pode ser alterada sem que seja necessário descartar e recriar o índice. Consulte Opção oculta.

As opções de agrupamento em um índice existente podem ser atualizadas. Para alterar outras opções de índice, descarte o índice existente com db.collection.dropIndex() e, em seguida, execute createIndexes com as novas opções.

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.

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.

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.

Para alterar a opção hidden para índices existentes, você pode utilizar os seguintes métodos do mongosh :

Por exemplo,

  • Para alterar a opção hidden para um índice para true, utilize o método db.collection.hideIndex():

    db.restaurants.hideIndex( { borough: 1, ratings: 1 } );
  • Para alterar a opção hidden para um índice para false, utilize o método db.collection.unhideIndex():

    db.restaurants.unhideIndex( { borough: 1, city: 1 } );

Dica

Veja também:

  • 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 :

    {
    "wildcardProjection" : {
    "_id" : 1,
    "<field>" : 0|1
    }
    }

    Todas as declarações no documento wildcardProjection devem ser declarações de inclusão ou de exclusão. Você também pode incluir o campo _id com declarações de exclusão. Esta é a única exceção à regra.

  • Os índices curinga não suportam:

    Os índices curinga são índices esparsos . Eles não oferecem suporte a queries quando um campo indexado não existe. Um índice curinga indexará o documento se o campo curinga tiver um valor null.

    A partir do MongoDB 7.0, os índices curinga suportam ordem crescente (1) e decrescente (-1). As versões anteriores suportavam apenas ordem crescente.

Para saber mais, consulte:

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 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á.

Há diferenças importantes entre quóruns para a confirmação e preocupações de gravação:

  • Construções de índice usam quóruns para a confirmação.

  • As operações de gravação usam preocupações de gravação.

Cada nó portador de dados em um cluster é um membro votante.

O quorum para o commit especifica quantos membros votantes com dados, ou quais membros votantes, incluindo o primário, devem estar preparados para confirmar uma construção de índice simultânea. antes que o primário execute o commit.

A preocupação de gravação é o nível de reconhecimento de que a gravação se propagou para o número especificado de instâncias.

Alterado na versão 8.0: O quorum de confirmação especifica quantos nós devem estar prontos para concluir a criação do índice antes que o primário faça a confirmação da criação do índice. Em contraste, quando o primário tiver confirmado a criação do índice, a preocupação de gravação especifica quantos nós devem replicar a entrada do oplog de criação do índice antes que o comando retorne sucesso.

Em versões anteriores, quando o primário confirmava a criação do índice, a preocupação de gravação especificava quantos nós deveriam finalizar a criação do índice antes que o comando retornasse sucesso.

O seguinte comando constrói dois índices na coleção inventory do banco de dados products:

db.getSiblingDB("products").runCommand(
{
createIndexes: "inventory",
indexes: [
{
key: {
item: 1,
manufacturer: 1,
model: 1
},
name: "item_manufacturer_model",
unique: true
},
{
key: {
item: 1,
supplier: 1,
model: 1
},
name: "item_supplier_model",
unique: true
}
],
writeConcern: { w: "majority" }
}
)

Quando a criação de índices for concluída, o MongoDB gera um documento de resultados que inclui um status de "ok" : 1.

Observação

Para obter a documentação completa sobre índices Curinga, consulte Índices Curinga.

As seguintes listas listam exemplos de criação de índice coringa:

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.runCommand(
{
createIndexes: "products_catalog",
indexes: [
{
key: { "product_attributes.$**" : 1 },
name: "wildcardIndex"
}
]
}
)

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.

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.runCommand(
{
createIndexes: "products_catalog",
indexes: [
{
key: { "$**" : 1 },
name: "wildcardIndex"
}
]
}
)

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.

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.runCommand(
{
createIndexes: "products_catalog",
indexes: [
{
key: { "$**" : 1 },
"wildcardProjection" : {
"product_attributes.elements" : 1,
"product_attributes.resistance" : 1
},
name: "wildcardIndex"
}
]
}
)

Enquanto o padrão de chave "$**" abrange todos os campos do documento, o campo wildcardProjection limita o índice apenas aos campos incluídos e seus campos aninhados.

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.

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.runCommand(
{
createIndexes: "products_catalog",
indexes: [
{
key: { "$**" : 1 },
"wildcardProjection" : {
"product_attributes.elements" : 0,
"product_attributes.resistance" : 0
},
name: "wildcardIndex"
}
]
}
)

Enquanto o padrão de chave "$**" abrange todos os campos no documento, o campo wildcardProjection exclui os campos especificados do índice.

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.

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.

Para definir o quórum para a confirmação, use createIndexes para especificar o valor commitQuorum.

commitQuorum especifica quantos nós votantes portadores de dados, ou quais nós votantes, incluindo o primário, devem estar preparados para confirmar a construção do índice antes que o primário execute o commit. O commit quorum padrão é votingMembers, o que significa todos os nós portadores de dados.

A seguinte operação cria um índice com um quórum para a confirmação de "majority", ou uma simples maioria dos nós com recurso de dados:

db.getSiblingDB("examples").runCommand(
{
createIndexes: "invoices",
indexes: [
{
key: { "invoices" : 1 },
"name" : "invoiceIndex"
}
],
"commitQuorum" : "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.

O comando createIndexes retorna um documento que indica o sucesso da operação. O documento contém alguns, mas não todos os seguintes campos, dependendo do resultado:

createIndexes.createdCollectionAutomatically

Se true, a collection não existiu e foi criada no processo de criação do índice.

createIndexes.numIndexesBefore

O número de índices no início do comando.

createIndexes.numIndexesAfter

O número de índices no final do comando.

createIndexes.ok

Um valor de 1 indica que os índices estão em vigor. Um valor de 0 indica um erro.

createIndexes.note

Este note será retornado se já existir um índice ou índices existentes. Isso indica que o índice não foi criado ou alterado.

createIndexes.errmsg

Retorna informações sobre quaisquer erros.

createIndexes.code

O código de erro que representa o tipo de erro.

Voltar

criar