Para indexar matrizes, o MongoDB Search requer apenas o tipo de dados dos elementos da matriz . Você não precisa especificar que os dados estão contidos em uma array ([]
) na definição de índice.
Se você habilitar os mapeamentos dinâmicos, o MongoDB Search indexará automaticamente os elementos de tipos de dados indexáveis dinamicamente dentro da array. Para saber mais sobre os tipos de dados que o MongoDB Search indexa dinamicamente, consulte Tipos de campo do MongoDB Search.
Você pode utilizar o Editor Visual ou o Editor JSON na UI do Atlas para definir o índice para elementos em arrays.
Como o MongoDB pesquisa os elementos de array do índice?
O MongoDB Search indexa os tipos de dados suportados dentro de uma matriz nivelando os campos durante a indexação.
Exemplo
Considere os seguintes documentos:
doc1 = { a: {b: [[<value1>, <value2>], <value3>] }} doc2 = { a: {b: [<value1>, <value2>, <value3>] } } doc3 = { a: [{ b: <value1>}, {b: <value2>}, {b: <value3>}] }
O MongoDB Search nivela as arrays anteriores semelhante à seguinte durante a indexação:
LuceneDoc<n> = {"a.b":[<value1>,<value2>,<value3>]}
Como posso indexar objetos em arrays?
Para fazer query em campos dentro de um array de documentos ou objetos, você deve usar o tipo EmbeddedDocuments para indexar o campo que contém o array de objetos.
Definir o índice para os elementos da array
Para definir o índice para os elementos de array, escolha seu método de configuração preferido na UI do Atlas e então selecione o banco de dados e a collection.
Clique em Refine Your Index para configurar seu índice.
Na seção Field Mappings, clique em Add Field Mapping para abrir a janela Add Field Mapping.
Clique em Customized Configuration.
Selecione o campo da array do tipo a ser indexada no menu suspenso Field Name .
Clique no menu suspenso Data Type e selecione o tipo de dados do elemento de matriz que você deseja indexar. Para saber mais sobre a configuração das propriedades do tipo selecionado, consulte a documentação do tipo selecionado.
Clique em Add.
A seguir está a sintaxe JSON para indexar elementos dentro de uma array. Substitua a definição de índice padrão pelo seguinte.
1 { 2 "mappings": { 3 "dynamic": true|false, 4 "fields": { 5 "<array-field-name>": { 6 "type": "<array-element-data-type>" 7 } 8 } 9 } 10 }
Experimente um exemplo de indexação de elementos de array
O exemplo de definição de índice abaixo usa a coleção sample_mflix.movies. 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 o campo genres
, que contém uma array de valores de string.
Na janela Add Field Mapping, selecione genres no menu suspenso Field Name.
Clique no menu suspenso Data Type e selecione String.
Mantenha as configurações padrão para o String Properties.
Clique em Add.
Substitua a definição de índice padrão pela seguinte definição de índice.
1 { 2 "mappings": { 3 "fields": { 4 "genres": { 5 "type": "string" 6 } 7 } 8 } 9 }