Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

createIndexes

Nesta página

  • Definição
  • Considerações
  • Comportamento
  • Exemplo
  • 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 ajuda db.collection.createIndex() e db.collection.createIndexes() .

Os métodos auxiliares são convenientes 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 conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

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 usa os seguintes campos:

Campo
Tipo
Descrição
createIndexes
string
A coleção para a qual criar índices.
indexes
variedade
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
qualquer

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 índices de texto, geoespaciais e com 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 documento wildcardProjection :

    {
    "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 documento wildcardProjection .

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

Para obter exemplos de criação de índice curinga, consulte Criar um índice curinga.

name
string
Um nome que identifica exclusivamente o índice.
background
boleano

Opcional. Obsoleto no MongoDB 4,2.

  • Para versão de compatibilidade de recursos (fcv) "4.0", especificar background: true direciona o MongoDB para construir o índice em segundo plano. As compilações em segundo plano não bloqueiam operações na collection. O valor padrão é false.

  • Alterado na versão 4,2.

    Para a versão de compatibilidade do recurso (FCV) "4.2", todas as compilações de índices usam um processo de compilação otimizado que mantém o bloqueio exclusivo somente no início e no final do processo de compilação. O restante do processo de construção resulta em operações intercaladas de leitura e escrita. O MongoDB ignora a opção background se especificada.

unique
boleano

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:

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

sparse
boleano

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.

boleano

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 campo e peso. 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 Controlar resultados da pesquisa com pesos 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 parada e as regras para o stemmer e o tokenizer. Consulte Idiomas de pesquisar de Texto para os idiomas disponíveis e Especificar um Idioma para o Índice de Texto 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 Usar qualquer campo para especificar o idioma de um documento 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.

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 ver as versões disponíveis, consulte Versões.

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

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

Com exceção de incluir explicitamente o campo _id , não é possível combinar declarações de inclusão e exclusão no documento wildcardProjection .

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 .

Observação

Alterado no MongoDB 4,2

A partir da versão 4.2, para featureCompatibilityVersion definido como "4.2" ou superior, o MongoDB remove o limite de Comprimento do Nome do Índice de no máximo 127 bytes. Em versões anteriores ou versões do MongoDB com featureCompatibilityVersion (FCV) definido como "4.0", os nomes dos índices devem estar dentro do limite.

A partir da versão 4.2, o comando createIndexes e mongosh auxiliares db.collection.createIndex() e db.collection.createIndexes() relatam um erro se você criar um índice com um nome e 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.

O índice se baseia em um conjunto de réplicas ou cluster fragmentado criado simultaneamente em todos os membros do conjunto de réplicas com dados. Para clusters fragmentados, a construção de índices ocorre somente em shards que contêm dados para a collection que está sendo indexada. O primário requer um número mínimo de membros voting portadores de dados (ou seja, quórum para a confirmação), incluindo ele próprio, que deve concluir a compilação antes de marcar o índice como pronto para uso. Consulte Construções de Índices em Ambientes Replicados para obter mais informações.

Para iniciar uma construção de índice com um commit quorum não padrão, especifique o commitQuorum.

Use o comando setIndexCommitQuorum para modificar o quórum para a confirmação de uma construçã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, 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.

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.

Alterado na versão 4,2.

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 exclusivo trava. createIndexes permite intercalar operações de leitura e gravação durante a maior parte da compilação do índice.

Para featureCompatibilityVersion "4.0", o createIndexes utiliza o pré-4.2 processo de construção do índice 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 pré-4. O processo de construção 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 recebem um bloqueio exclusivo.

Para obter mais informações sobre o comportamento de bloqueio de createIndexes, consulte Index Builds on PopulatedCollections.

O createIndexes permite criar um ou mais índices em uma collection. 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 é 200 megabytes (para as versões 4.2.3 e posteriores) e 500 (para as versões 4.2.2 e anterior), compartilhado entre todos os índices construídos utilizando 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 soltar 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, solte o índice existente com db.collection.dropIndex() então execute createIndexes com as novas opções.

Novidade na versão 3.4.

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.

Observação

Para ocultar um índice, você deve definir featureCompatibilityVersion para 4.4 ou superior. No entanto, uma vez ocultado, o índice permanece oculto mesmo com featureCompatibilityVersion definido para 4.2 nos binários do MongoDB 4.4.

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:

Novidades na versão 4.2.

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.

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 read concern "local". Se você especificar um nível de preocupação de leitura diferente de "local", a transação falhará.

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.

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

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 obter 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 do parâmetro para obter 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.

O índice se baseia em um conjunto de réplicas ou cluster fragmentado criado simultaneamente em todos os membros do conjunto de réplicas com dados. Para clusters fragmentados, a construção de índices ocorre somente em shards que contêm dados para a collection que está sendo indexada. O primário requer um número mínimo de membros voting portadores de dados (ou seja, quórum para a confirmação), incluindo ele próprio, que deve concluir a compilação antes de marcar o índice como pronto para uso. Consulte Construções de Índices em Ambientes Replicados para obter mais informações.

Especifique a opção 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 quorum para o commit padrão é votingMembers ou todos os nós do conjunto de réplicas com dados.

A seguinte operação cria um índice com um commit quorum 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.

← criar