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

Como indexar campos em arrays de objetos e documentos

Nesta página

  • Revise as limitações de tipo embeddedDocuments
  • Defina o índice para o tipo embeddedDocument
  • Configurar propriedades do campo embeddedDocument
  • Experimente um exemplo para o tipo de embeddedDocument

Observação

A opção de índice embeddedDocuments do Atlas Search, o operadorembeddedDocument e a opção de pontuação embedded estão em pré-visualização. Quando um índice do Atlas Search em um conjunto de réplicas ou shard do MongoDB atinge o limite de dois bilhões de documentos do Lucene, o Atlas Search não indexa novos documentos nem aplica atualizações a documentos existentes para esse índice. Uma solução para acomodar essa limitação será implementada quando esse recurso estiver geralmente disponível. Para solucionar qualquer problema relacionado ao uso dessa funcionalidade, entre em contato com o Suporte.

Você pode usar o tipo embeddedDocuments do Atlas Search para indexar campos em documentos e objetos que são elementos de uma array. O Atlas Search indexa documentos incorporados independente do documento principal. Cada documento indexado contém apenas campos que fazem parte do elemento de array do documento incorporado. Você pode usar somente o operador embeddedDocument para campos de query indexados como tipo embeddedDocuments.

O Atlas Search não indexa dinamicamente campos de índice do tipo embeddedDocument. Você deve utilizar mapeamentos estáticos para indexar campos do embeddedDocument. Você pode usar o Visual Editor ou o JSON Editor na UI do Atlas para indexar campos do tipo embeddedDocument.

Observação

O Atlas Search não permite a indexação de mais de dois bilhões de objetos de índice, em que cada documento incorporado indexado conta como um único objeto. O uso do tipo de campo embeddedDocuments pode resultar na indexação de objetos acima desse limite, o que faz com que um índice passe para um estado de falha. Se sua coleção tiver matrizes grandes que podem gerar dois bilhões de objetos, você deverá fragmentar todos os clusters que contenham índices com o tipo embeddedDocuments .

Aplicam-se as seguintes limitações:

  • Você pode utilizar o embeddedDocuments somente em campos com até 5 níveis de aninhamento. Um campo embeddedDocuments não pode ter mais de 4 campos embeddedDocuments pai.

  • Não é possível usar embeddedDocuments para uma facet de data ou número.

  • Você não pode definir um campo dentro do tipo embeddedDocuments como o tipo knnVector.

  • Você não pode indexar filhos de campos indexados com tipo embeddedDocuments igual a token.

  • Para destacar campos em documentos incorporados, você também deve indexar o principal do campo que deseja destacar como o tipo de documento.

  • Você pode fazer o seguinte somente se indexar os pais do campo filho do documento incorporado como o tipo de documento :

    • Pesquisa facetada em campos de string em documentos incorporados. Você também deve indexar o campo em que deseja facetar como o tipo stringFacet .

      Observação

      Quando facetas são utilizadas em um campo de string dentro de documentos incorporados, o Atlas Search retorna a contagem de facetas somente para o número de documentos principais correspondentes.

      Não é possível facetar campos numéricos e de data em documentos incorporados.

    • Realce campos em documentos incorporados. Para ver um exemplo, consulte o tutorial How to Run Atlas Search Queries Against Objects in Arrays .

    • Classifique pelo pai do campo de documento incorporado. Você também deve indexar o campo do documento incorporado com valores de string como o tipo de token . Para campos filho com valores de número e data, habilite o mapeamento dinâmico para indexar esses campos automaticamente. Para obter um exemplo, consulte Exemplo de classificação.

Para definir o índice para o tipo embeddedDocument , escolha seu método de configuração preferido na UI do Atlas e então selecione o banco de dados e collection.

  1. Clique em Refine Your Index para configurar seu índice.

  2. Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.

  3. Selecione o campo a ser indexado no menu suspenso Field Name.

    Observação

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

  4. Clique no menu suspenso Data Type e selecione EmbeddedDocument.

  5. Alterne a configuração de Enable Dynamic Mapping para habilitar ou desabilitar a indexação dinâmica de todos os campos indexáveis dinamicamente no documento. Para saber mais, consulte Como configurar as propriedades do campo document.

  6. Clique em Add.

  7. Se você desativou o mapeamento dinâmico, clique em Add Embedded Field para o campo de tipo EmbeddedDocument para definir mapeamentos de campo para os campos do documento.

A seguir está a sintaxe JSON para o tipo embeddedDocument . Substitua a definição de índice padrão pelo seguinte. Para saber mais sobre os campos, consulte Propriedades do Campo.

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "embeddedDocuments",
7 "dynamic": true|false,
8 "fields": {
9 "<field-name>": {
10 <field-mapping-definition>
11 }
12 }
13 }
14 }
15 }
16}

O tipo embeddedDocuments do Atlas Search usa os seguintes parâmetros:

Campo
Tipo
necessidade
Descrição
default
type
string
Obrigatório
Etiqueta legível por humanos que identifica o tipo de campo. O valor deve ser embeddedDocuments.
dynamic
booleano
Opcional

Sinalizador que especifica se deve indexar todo campo dinamicamente indexável no documento. O valor pode ser um dos seguintes:

  • true - indexar todos os campos indexáveis.

  • false - não indexe todos os campos indexáveis.

false
fields
documento
Opcional

Campos para indexar.

Se dynamic for true, o Atlas Search indexa todos os campos indexáveis.

Se dynamic for false, você pode especificar os campos a serem indexados na definição de campo para fields.

Observação

O Atlas Search não aceita indexação de campos facet como parte de um campo embeddedDocuments.

{}

O exemplo de definição de índice abaixo utiliza a collection sample_supplies.sales . Se você já tiver os dados de amostra carregados em seu cluster, poderá usar o Visual Editor ou o Editor JSON na UI do Atlas para configurar o índice. Após selecionar seu método de configuração preferido, selecione o banco de dados e a coleção e filtre seu índice para adicionar mapeamentos de campo.

A seguinte definição de índice indexa a array de objetos no campo items. Ele também configura o Atlas Search para indexar automaticamente todos os campos indexáveis dinamicamente dentro dos objetos na array items.

  1. Na janela Add Field Mapping, selecione items no menu suspenso Field Name.

  2. Clique no menu suspenso Data Type e selecione EmbeddedDocuments.

  3. Alterne o Enable Dynamic Mapping para habilitar o mapeamento dinâmico, se necessário.

  4. Clique em Add.

Substitua a definição de índice padrão pela seguinte definição de índice.

1{
2 "mappings": {
3 "fields": {
4 "items": {
5 "type": "embeddedDocuments",
6 "dynamic": true
7 }
8 }
9 }
10}

Observação

Para indexar todos os campos em um documento embutido incluindo campos que o Atlas Search não indexa dinamicamente, defina os campos na definição de índice. Para faceting de string, o Atlas Search conta facets de string uma vez para cada documento no conjunto de resultados.

Por exemplo, a definição de índice a seguir configura o Atlas Search para indexar automaticamente todos os campos indexáveis dinamicamente dentro dos objetos na array items. Ele também configura o campo purchaseMethod dentro da array de objetos para ser indexado como stringFacet, que o Atlas Search não indexa dinamicamente, para suportar as queries de facet do Atlas Search nesse campo:

Clique em Add Field na seção Field Mappings e adicione os seguintes campos clicando em Add após configurar as configurações para cada campo na janela Add Field Mapping.

Field Name
Data Type
items
Clique no menu suspenso e selecione EmbeddedDocuments.
purchaseMethod
Clique no menu suspenso e selecione StringFacet.
1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "items": {
6 "dynamic": true,
7 "type": "embeddedDocuments"
8 },
9 "purchaseMethod": {
10 "type": "stringFacet"
11 }
12 }
13 }
14}

A definição de índice a seguir configura o Atlas Search para indexar somente os campos name e tags como o tipo string do Atlas Search na array de objetos items .

  1. Na janela Add Field Mapping, selecione items no menu suspenso Field Name.

  2. Clique no menu suspenso Data Type e selecione EmbeddedDocuments.

  3. Desative Enable Dynamic Mapping.

  4. Clique em Add.

  5. Clique em Add Embedded Field para o campo items na tabela Field Mappings e adicione os seguintes campos clicando em Add após configurar as configurações para cada campo na janela Add Embedded Field Mapping .

    Field Name
    Data Type
    items.name
    Clique no menu suspenso Data Type e selecione String.
    items.tags
    Clique no menu suspenso Data Type e selecione String.

Substitua a definição de índice padrão pela seguinte definição de índice.

1{
2 "mappings": {
3 "fields": {
4 "items": {
5 "type": "embeddedDocuments",
6 "dynamic": false,
7 "fields": {
8 "name": {
9 "type": "string"
10 },
11 "tags": {
12 "type": "string"
13 }
14 }
15 }
16 }
17 }
18}

Dica

Consulte também: Exemplos adicionais de definição de índice

Voltar

documento

Próximo

geo