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

Incluir ou excluir campos em um índice curinga

Nesta página

  • Restrições
  • Antes de começar
  • Procedimentos
  • Incluir Campos Específicos em um Índice Curinga
  • Excluir campos específicos de um índice curinga
  • Saiba mais

Ao criar um índice curinga, você pode especificar campos a serem incluídos ou excluídos no índice. Isso permite que você:

  • Crie um índice curinga que abranja apenas campos específicos. Por exemplo, se você tiver vários documentos incorporados com vários subcampos, poderá criar um índice para abranger consultas tanto em documentos incorporados quanto em seus subcampos.

  • Crie um índice curinga que omita campos específicos. Por exemplo, se tiver uma coleção que contenha um campo que nunca seja consultado, você poderá omitir esse campo do índice.

Para incluir ou excluir campos em um índice curinga, especifique os campos escolhidos na opção wildcardProjection :

db.<collection>.createIndex(
{
"$**" : <sortOrder>
},
{
"wildcardProjection" : {
"<field1>" : < 0 | 1 >,
"<field2>" : < 0 | 1 >,
...
"<fieldN>" : < 0 | 1 >
}
}
)

No documento wildcardProjection , o valor 0 ou 1 indica se o campo está incluído ou excluído no índice:

  • 0 significa que o campo foi excluído.

  • 1 significa que o campo está incluído.

  • Para usar a opção wildcardProjection , sua chave de índice deve ser $**.

  • Os índices curinga não suportam a combinação de declarações de inclusão e exclusão no documento wildcardProjection , exceto quando se inclui explicitamente o campo _id. Por exemplo:

    • O seguinte documento wildcardProjection é inválido porque especifica uma inclusão e uma exclusão de um campo:

      {
      "wildcardProjection" : {
      "attributes" : 0,
      "users" : 1
      }
      }
    • O seguinte documento wildcardProjection é válido porque, embora especifique a inclusão e a exclusão, ele inclui o campo _id :

      {
      "wildcardProjection" : {
      "attributes" : 0,
      "_id" : 1
      }
      }

Crie uma coleção de products que contenha os seguintes documentos:

db.products.insertMany( [
{
"item": "t-shirt",
"price": "29.99",
"attributes": {
"material": "cotton",
"color": "blue",
"size": {
"units": "cm",
"length": 74
}
}
},
{
"item": "milk",
"price": "3.99",
"attributes": {
"sellBy": "02-06-2023",
"type": "oat"
}
},
{
"item": "laptop",
"price": "339.99",
"attributes": {
"memory": "8GB",
"size": {
"units": "inches",
"height": 10,
"width": 15
}
}
}
] )

Cada documento possui um campo attributes que contém detalhes do produto. Os subcampos de attributes variam dependendo do produto.

Você pode usar a opção wildcardProjection para:

  • Incluir Campos Específicos em um Índice Curinga

  • Excluir campos específicos de um índice curinga

Se você query com frequência determinados campo de documento, pode especificar esses campo em um wildcardProjection para dar suporte a essas query sem adicionar inchaço desnecessário ao índice.

A seguinte operação cria um índice curinga que contém todos os valores escalares (ou seja, strings e números) dos campos attributes.size e attributes.color :

db.products.createIndex(
{
"$**" : 1
},
{
"wildcardProjection" : {
"attributes.size" : 1,
"attributes.color" : 1
}
}
)

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

Se um campo for um documento incorporado ou array (como attributes.size), o índice curinga recorrerá ao campo e indexará todos os valores de campo escalar incorporado.

O índice criado suporta queries sobre qualquer valor escalar incluído no objeto wildcardProjection. Por exemplo, o índice oferece suporte a estas queries:

db.products.find( { "attributes.size.height" : 10 } )
db.products.find( { "attributes.color" : "blue" } )

O índice não suporta queries em campos não incluídos no wildcardProjection, como esta query:

db.products.find ( { "item": "milk" } )

Se houver campo de documento que você raramente faz query, poderá criar um índice curinga que omite esses campo.

A seguinte operação cria um índice curinga em todos os campos do documento na collection products , mas omite o campo attributes.memory do índice:

db.products.createIndex(
{
"$**" : 1
},
{
"wildcardProjection" : {
"attributes.memory" : 0
}
}
)

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

Se um campo for um documento incorporado ou array (como attributes.size), o índice curinga recorrerá ao campo e indexará todos os valores de campo escalar incorporado.

Por exemplo, o índice aceita estas queries:

db.products.find( { "attributes.color" : "blue" } )
db.products.find( { "attributes.size.height" : 10 } )

O índice não suporta query no attributes.memory, porque este campo foi omitido do índice.

Para saber como usar a projeção curinga com um índice composto curinga para filtrar campos, consulte Filtrar campos com um wildcardProjection.

Para saber mais sobre comportamentos e casos de uso de índices curinga, consulte:

← Criar um Índice Curinga em um Campo Único