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 mapeamentos dinâmicos, MongoDB Search indexará automaticamente elementos de tipos de dados indexáveis dinamicamente dentro do array. Para saber mais sobre os tipos de dados que o MongoDB Search indexa dinamicamente, veja 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 collection 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 }