Criar um Índice em um Campo de Array
Você pode criar um índice em um campo que contém um valor de array para melhorar o desempenho de queries nesse campo. Quando você cria um índice em um campo que contém um valor de array, o MongoDB armazena esse índice como um índice de várias chaves.
Para criar um índice, use o método db.collection.createIndex()
. Sua operação deve se assemelhar a este protótipo:
db.<collection>.createIndex( { <field>: <sortOrder> } )
Sobre esta tarefa
O exemplo nesta página utiliza uma coleção students
que contém estes documentos:
db.students.insertMany( [ { "name": "Andre Robinson", "test_scores": [ 88, 97 ] }, { "name": "Wei Zhang", "test_scores": [ 62, 73 ] }, { "name": "Jacob Meyer", "test_scores": [ 92, 89 ] } ] )
Você executa regularmente uma consulta que retorna alunos com pelo menos um test_score
maior que 90
. É possível criar um índice no campo test_scores
para melhorar o desempenho dessa consulta.
Procedimento
A seguinte operação cria um índice de múltiplas chaves ascendente no campo test_scores
da coleção students
:
db.students.createIndex( { test_scores: 1 } )
Como o test_scores
contém um valor de array, o MongoDB armazena este índice como um índice de múltiplas chaves.
Resultados
O índice contém uma chave para cada valor individual que aparece no campo test_scores
. O índice está subindo, o que significa que as chaves são armazenadas nesta ordem: [ 62, 73, 88, 89, 92, 97 ]
.
O índice suporta queries que selecionam no campo test_scores
. Por exemplo, a query a seguir retorna documentos em que pelo menos um elemento na array test_scores
é maior que 90:
db.students.find( { test_scores: { $elemMatch: { $gt: 90 } } } )
Saída:
[ { _id: ObjectId("632240a20646eaee87a56a80"), name: 'Andre Robinson', test_scores: [ 88, 97 ] }, { _id: ObjectId("632240a20646eaee87a56a82"), name: 'Jacob Meyer', test_scores: [ 92, 89 ] } ]
Saiba mais
Para saber como criar um índice de várias chaves em campos de documentos incorporados, consulte Criar um índice em um campo incorporado em uma array.
Para saber mais sobre os limites de índice multikey, consulte Limites de índice multikey.