Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Menu Docs

Defina mapeamentos de campo

Ao criar um índice de pesquisa MongoDB, você pode especificar quais campos indexar usando os seguintes métodos:

  • Mapeamentos dinâmicos: deixe que o MongoDB Search indexe automaticamente todos os campos com base em um conjunto padrão ou configurado de tipos de campo (typeSet).

  • Mapeamentos estáticos: permitem que você especifique quais campos incluir no índice.

Por padrão, o MongoDB pesquisa para de replicar alterações para índices maiores que 2.1 bilhões de objetos de índice em um conjunto de réplicas ou fragmento único, onde cada documento indexado ou aninhado embeddedDocument conta como um único objeto. Isso significa que seu índice permanece consultável, mas você pode obter resultados obsoletos.

Se você planeja indexar campos que podem exceder 2.1 bilhões de objetos, onde um objeto de índice é um documento de nível superior ou um documento incorporado, use a opção de índice numPartitions para dividir seu índice (suportado somente na implantação de nós de pesquisa) ou fragmentar seu cluster.

Você não pode indexar campos que contêm o sinal de dólar ($) no início do nome do campo.

A sintaxe a seguir demonstra como habilitar o MongoDB Search para indexar campos usando mapeamentos dinâmicos e estáticos. Para saber mais sobre mapeamentos dinâmicos e estáticos, consulte Mapeamentos dinâmicos e estáticos.

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>",
20 ...
21 },
22 ...
23 ]
24 },
25 ...
26 ]
27}

Você pode configurar a Pesquisa MongoDB com:

  • Mapeamentos dinâmicos para indexar automaticamente campos com base em um conjunto de tipos padrão ou configurado (typeSet)

  • Mapeamentos estáticos apenas para campos especificados do índice

Você também pode usar mapeamentos dinâmicos com mapeamentos estáticos. Os mapeamentos estáticos substituem a configuração de mapeamentos dinâmicos.

Os mapeamentos dinâmicos do MongoDB pesquisa permitem configurar o MongoDB pesquisa para indexar automaticamente e recursivamente campos em seus dados. Os campos podem ser indexados com base no conjunto padrão de tipos ou configurando um typeSet.

Você pode habilitar ou configurar mapeamentos dinâmicos:

  • No nível raiz mappings para aplicar a todo o documento.

  • [Recomendado] Dentro de um tipo de campo document para aplicar a um objeto especificado.

  • [Recomendado] Em um tipo de campo embeddedDocuments para aplicar a uma array especificada de objetos que exigem comparações de query por elemento (semelhante a $elemMatch).

Observação

Melhores práticas

Os mapeamentos dinâmicos podem resultar na indexação de um grande número de campos exclusivos, que ocuparão mais espaço em disco e podem ter menos desempenho. Use mapeamentos dinâmicos somente se precisar indexar campos que mudam regularmente ou que são desconhecidos. Sempre use mapeamentos dinâmicos em um documento, não no nível do documento pai.

Quando você utiliza mapeamentos dinâmicos para indexar seus dados:

  • O MongoDB Search também indexa dinamicamente todos os campos aninhados suportados pelo typeSet em um objeto document em seus dados.

  • Se um campo contiver dados polimórficos, o MongoDB pesquisa indexará automaticamente o campo como todos os tipos suportados pelo typeSet usado no índice. Se um campo contiver dados de um tipo não suportado pela typeSet pesquisa, o MongoDB não indexará estes dados.

A Pesquisa do MongoDB usa o typeSet padrão quando dynamic é definido como true. No typeSet padrão, a MongoDB pesquisa indexa os tipos de BSON como tipos de campo da MongoDB pesquisa. A tabela seguinte mostra os tipos BSON que o MongoDB Pesquisa automaticamente inclui no índice como tipos de campo do MongoDB Pesquisa quando você utiliza o typeSet padrão. O MongoDB Search também indexa automaticamente os seguintes tipos de BSON quando eles estão contidos em arrays e objetos.

BSON Tipo
Tipo de campo de pesquisa do MongoDB

Boolean

Data

Double, 32bits inteiros, 64bits inteiros

ObjectId

String

UUID

Zero

A seguir está a sintaxe para ativar o conjunto de tipos padrão para mapeamentos dinâmicos:

1{
2 "mappings": {
3 "dynamic": false
4 }
5}

Para exemplos de índice que demonstram a indexação de todos os campos usando o typeSet padrão, consulte Exemplos de mapeamento dinâmico.

Especifique os tipos de campo do MongoDB Search para indexar dinamicamente configurando um typeSet. Você pode configurar qualquer tipo BSON para ser indexado automaticamente como qualquer tipo de campo do MongoDB Search, exceto document, embeddedDocuments, vector, ou tipos de campo obsoletos.

Um typeSet tem a seguinte sintaxe:

Observação

Você não pode configurar um typeSet na IU do Atlas Visual Editor. Use a IU do Atlas JSON Editor em vez disso.

1{
2 "mappings": {
3 "dynamic": {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>"
20 },
21 ...
22 ]
23 },
24 ...
25 ]
26}

Antes de configurar um typeSet, considere o seguinte:

  • Você não pode definir o mesmo tipo de campo várias vezes no mesmo objeto typeSet . Você pode configurar somente uma definição typeSet para cada tipo de campo .

    Por exemplo, você não pode definir várias configurações para o tipo number na mesma definição typeSet.

  • Você pode configurar mapeamentos dinâmicos com o analisador multi .

Para exemplos de índice que demonstram o uso de configuração personalizada typeSet, consulte Exemplos de mapeamento dinâmico.

Use mapeamentos estáticos para configurar opções de índice para campos que você não deseja indexados dinamicamente ou para configurar um único campo independentemente de outros em um índice. Quando você utiliza mapeamentos estáticos, o MongoDB Search indexa somente os campos que você especifica no mappings.fields. Você também pode usar mapeamentos estáticos para excluir campos de serem indexados.

Para utilizar mapeamentos estáticos para configurar opções de índice para somente alguns campos, defina mappings.dynamic para false e especifique o nome do campo, tipo de dados e outras opções de configuração para cada campo que você deseja indexar. Você pode especificar os campos em qualquer ordem.

Se você omitir o campo mappings.dynamic, ele será padronizado como false.

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}

Para definir o índice para um campo aninhado, você deve definir os mapeamentos para cada campo pai daquele campo aninhado. Você não pode usar notação de ponto para acessar estaticamente o índice de campos aninhados. Por exemplo, consulte os Exemplos ou Exemplo de mapeamento combinado abaixo.

Você pode usar mapeamentos estáticos para criar índices de campos como vários tipos. Para definir um campo como vários tipos, defina os tipos na array de definição do campo para o campo. Você pode usar qualquer campo como qualquer tipo suportado usando mapeamentos estáticos para índice. Para saber mais, consulte Tipos de Campo de Pesquisa MongoDB.

O exemplo a seguir mostra a definição de campo para indexar um campo como tipos múltiplos.

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<type-set-name>"
5 },
6 "fields": {
7 "<field-name>": [
8 {
9 "type": "<field-type>",
10 ...
11 },
12 {
13 "type": "<field-type>",
14 ...
15 },
16 ...
17 ],
18 ...
19 }
20 }.
21 "typeSets": [
22 {
23 "name": "<typeset-name>",
24 "types": [
25 {
26 "type": "<field-type>"
27 },
28 ...
29 ]
30 },
31 ...
32 ]
33}

Para outros exemplos de índice que demonstram mapeamentos estáticos, consulte Exemplo de mapeamento estático.

A Pesquisa do MongoDB não suporta os seguintes tipos de dados BSON:

  • Decimal128

  • JavaScript code with scope

  • Tecla máxima

  • Min key

  • Expressão regular

  • Timestamp

A Pesquisa do MongoDB armazena automaticamente campos do tipo string no mongot. Você pode armazenar campos de todos os tipos de dados suportados na MongoDB Search usando a opção Definir campos de origem armazenados no seu índice de pesquisa do MongoDB em sua definição de índice. Para saber mais sobre mongot e a arquitetura de nó do MongoDB Search, consulte Opções de sistema do MongoDB Search.

A tabela a seguir enumera os tipos de dados BSON compatíveis e os tipos de campo do MongoDB Search que você pode usar para indexar os tipos de dados BSON.A tabela também lista os operadores e coletores que você pode utilizar para consultar os valores de campo .

Esses operadores não suportam um array de strings.

A Pesquisa do MongoDB não inclui um tipo de campo para indexar valores nulos porque o MongoDB Search indexa automaticamente valores nulos para campos indexados estático e dinamicamente.

Obsoleto. Para saber mais sobre os tipos de campo de faceta obsoletos e suas contrapartes atualizadas, veja Comparando tipos de campo de faceta.

Array com valor double ou int.

Observação

Você pode armazenar campos de todos os tipos de dados suportados na MongoDB Search usando a opção storedSource.

Os exemplos seguintes utilizam a coleção sample_mflix.movies para demonstrar como configurar os campos para o índice utilizando mapeamentos dinâmicos e estáticos. Se você carregar os dados de amostra, poderá criar esses índices na coleção. Para saber como criar índices de pesquisa do MongoDB Search, consulte Início rápido do MongoDB Search.

Os seguintes exemplos de definição de índice demonstram mapeamentos dinâmicos.

Configure mapeamentos dinâmicos para indexar automaticamente somente tipos de campo especificados usando a definição personalizada de typeSet.

A seguinte definição de índice configura mapeamentos dinâmicos para os tipos de campo especificados. Índice:

  • Todos os valores numéricos na coleção como o tipo de campo number utilizam as configurações padrão para esse tipo.

  • Todos os valores de string na coleção como o tipo autocomplete usando a estratégia de tokenização edgeGram com um mínimo de quatro e um máximo de dez caracteres por token.

{
"mappings": {
"dynamic": {
"typeSet": "movieFieldTypes"
}
},
"typeSets": [
{
"name": "movieFieldTypes",
"types": [
{
"type": "number"
},
{
"type": "autocomplete",
"analyzer": "lucene.standard",
"tokenization": "edgeGram",
"minGrams": 4,
"maxGrams": 10
}
]
}
]
}

Configure diferentes mapeamentos dinâmicos no nível raiz e para campos aninhados usando a definição personalizada de typeSet.

Essa definição de índice:

  • Especifica o analisador de índice padrão como lucene.standard.

  • Especifica o analisador de pesquisa padrão como lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB.

  • Configura a indexação automática de todos os campos do string no nível raiz como os seguintes tipos de campo utilizando o typeSet denominado first:

    • token digite usando as configurações padrão do tipo.

    • autocomplete digite usando as configurações padrão do tipo.

  • Especifica o mapeamento estático para o documento do awards , que contém campos com valores numéricos e de texto. No entanto, a definição do índice configura a indexação automática de apenas campos do tipo number no documento usando o typeSet denominado second.

{
"mappings": {
"dynamic": {
"typeSet": "first"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "second"
}
}
}
},
"typeSets": [
{
"name": "first",
"types": [
{
"type": "token"
},
{
"type": "autocomplete"
}
]
},
{
"name": "second",
"types": [
{
"type": "number"
}
]
}
]
}

Configure mapeamentos dinâmicos, mas exclua campos de serem indexados usando mapeamentos estáticos.

Essa definição de índice:

  • Especifica o analisador de índice padrão como lucene.standard.

  • Especifica o analisador de pesquisa padrão como lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB.

  • Configura mapeamentos dinâmicos para tipos específicos de campo usando o typeSet chamado indexedTypes, que especifica o seguinte comportamento:

    • Indexar automaticamente os campos do tipo string como o tipo token.

    • Indexar automaticamente os campos do tipo number como o tipo number.

  • Exclui o campo plot de ser incluído no índice.

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

O seguinte exemplo de definição de índice demonstra mapeamentos estáticos.

Desative os mapeamentos dinâmicos, mas defina campos individuais para indexação.

  • Especifica o analisador de índice padrão como lucene.standard.

  • Especifica o analisador de pesquisa padrão como lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB.

  • Especifica mapeamentos de campo estáticos (dynamic: false), o que significa que campos que não são explicitamente mencionados não são incluídos no índice. Então, a definição do índice inclui:

    • O campo awards, que é do tipo document. Possui três subcampos incorporados, wins, nominations e text.

      Os subcampos wins e nominations usam o analisador lucene.standard por padrão para queries. Os índices de pesquisa do MongoDB indexam int64 valores no campo nominations.

      O subcampo text usa o analisador lucene.english por padrão para queries. Utiliza a opção ignoreAbove para ignorar qualquer string de mais de 255 bytes de comprimento.

    • O campo title, que é do tipo string. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisador multi denominado mySecondaryAnalyzer que utiliza o analisador lucene.french por padrão para queries.

    • O campo genres , que é um conjunto de cadeias de caracteres. Ele usa o analisador lucene.standard por padrão para queries. Para indexar matrizes, o MongoDB Search exige apenas o tipo de dados dos elementos da matriz . Você não precisa especificar que os dados estão contidos em uma matriz na definição de índice.

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": false,
"fields": {
"awards": {
"type": "document",
"fields": {
"wins": {
"type": "number"
},
"nominations": {
"type": "number",
"representation": "int64"
},
"text": {
"type": "string",
"analyzer": "lucene.english",
"ignoreAbove": 255
}
}
},
"title": {
"type": "string",
"analyzer": "lucene.whitespace",
"multi": {
"mySecondaryAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"genres": {
"type": "string",
"analyzer": "lucene.standard"
}
}
}
}

Os seguintes exemplos de definição de índice combinam mapeamentos dinâmicos com mapeamentos estáticos.

Desative os mapeamentos dinâmicos no nível raiz, mas defina mapeamentos estáticos e habilite mapeamentos dinâmicos para campos aninhados.

Essa definição de índice:

  • Especifica o analisador de índice padrão como lucene.standard.

  • Especifica o analisador de pesquisa padrão como lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB.

  • Especifica mapeamentos de campo estáticos (dynamic: false), o que significa que campos e tipos de campo que não são explicitamente mencionados não são indexados. Então, a definição do índice inclui:

    • O campo title, que é do tipo string. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisador multi denominado mySecondaryAnalyzer que utiliza o analisador lucene.french por padrão para queries.

    • O campo genres, que é um conjunto de cadeias de caracteres. Ele usa o analisador lucene.standard por padrão para consultas.

    • O campo awards, que é do tipo document. Possui três subcampos incorporados, wins, nominations e text. Em vez de mencionar explicitamente cada campo aninhado no documento, a definição de índice permite o mapeamento dinâmico para todos os subcampos no documento. Ele usa o analisador lucene.standard por padrão para query.

    {
    "analyzer": "lucene.standard",
    "searchAnalyzer": "lucene.standard",
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "string",
    "analyzer": "lucene.whitespace",
    "multi": {
    "mySecondaryAnalyzer": {
    "type": "string",
    "analyzer": "lucene.french"
    }
    }
    },
    "genres": {
    "type": "string",
    "analyzer": "lucene.standard"
    },
    "awards": {
    "type": "document",
    "dynamic": true
    }
    }
    }
    }

Configure mapeamentos dinâmicos para tipos de campo específicos e defina mapeamentos estáticos para campos individuais.

Essa definição de índice:

  • Especifica o analisador de índice padrão como lucene.standard.

  • Especifica o analisador de pesquisa padrão como lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB.

  • Especifica mapeamentos de campo estáticos (dynamic: false), o que significa que campos e tipos de campo que não são explicitamente mencionados não são indexados. Portanto, a definição do índice inclui somente o campo awards , que é do tipo document.

    O campo awards tem três subcampos incorporados, wins, nominations e text. Em vez de realizar a indexação automaticamente de todos os campos no documento configurando explicitamente dynamic para true ou indexando explicitamente cada campo aninhado no documento usando mapeamentos estáticos, a definição de indexação configura mapeamentos dinâmicos para o tipo de campo document usando a definição de tipos denominada movieAwards:

    • Campos de índice do tipo string utilizando analisadores lucene.english e lucene.french.

    • Campos de índice do tipo number utilizando as configurações padrão para o tipo number.

    • Campos de índice do tipo string e também do tipo autocomplete usando a estratégia de tokenização edgeGram para criar tokens entre três a cinco caracteres de comprimento.

      {
      "analyzer": "lucene.standard",
      "searchAnalyzer": "lucene.standard",
      "mappings": {
      "dynamic": false,
      "fields": {
      "awards": {
      "type": "document",
      "dynamic": {
      "typeSet": "movieAwards"
      }
      }
      }
      },
      "typeSets": [
      {
      "name": "movieAwards",
      "types": [
      {
      "type": "string",
      "multi": {
      "english": {
      "type": "string",
      "analyzer": "lucene.english"
      },
      "french": {
      "type": "string",
      "analyzer": "lucene.french"
      }
      }
      },
      {
      "type": "number"
      },
      {
      "type": "autocomplete",
      "analyzer": "lucene.standard",
      "tokenization": "edgeGram",
      "minGrams": 3,
      "maxGrams": 5,
      "foldDiacritics": false
      }
      ]
      }
      ]
      }

Configure mapeamentos dinâmicos no nível raiz e dentro de mapeamentos estáticos para campos aninhados.

Nesta definição de índice:

  • O analisador de índice padrão é lucene.standard.

  • O analisador de pesquisa padrão é lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de pesquisa do MongoDB .

  • O índice especifica mapeamentos dinâmicos para os tipos de campo definidos na definição typeSet denominada first. A definição first typeSet índice todos os campos do tipo string como o tipo token e todos os campos do tipo number como o tipo number utilizando configurações padrão para os tipos de campo.

  • A definição de índice especifica mapeamentos estáticos para o campo awards , mas configura mapeamentos dinâmicos para campos no documento awards usando o typeSet denominado second. A definição do tipo de campo second indexa todos os campos do tipo string no documento awards como tipo autocomplete usando as configurações padrão para esse tipo.

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": {
"typeSet": "first"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "second"
}
}
}
},
"typeSets": [
{
"name": "first",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
},
{
"name": "second",
"types": [
{
"type": "autocomplete"
}
]
}
]
}