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

Criar um Índice em um Campo Incorporado em uma Array

Nesta página

  • Sobre esta tarefa
  • Procedimento
  • Resultados
  • Classificar resultados
  • Saiba mais

Você pode criar índices em campos de documento incorporados dentro de arrays. Esses índices melhoram o desempenho de queries em campos incorporados específicos que aparecem em arrays. Quando você cria um índice em um campo dentro de uma array, o MongoDB armazena esse índice como um índice de múltiplas 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> } )

O exemplo nesta página utiliza uma coleção inventory que contém estes documentos:

db.inventory.insertMany( [
{
"item": "t-shirt",
"stock": [
{
"size": "small",
"quantity": 8
},
{
"size": "large",
"quantity": 10
},
]
},
{
"item": "sweater",
"stock": [
{
"size": "small",
"quantity": 4
},
{
"size": "large",
"quantity": 7
},
]
},
{
"item": "vest",
"stock": [
{
"size": "small",
"quantity": 6
},
{
"size": "large",
"quantity": 1
}
]
}
] )

Você precisa encomendar mais estoque sempre que tiver menos de cinco itens em estoque. Para localizar quais itens reordenar, consulte documentos em que um elemento na array stock tenha um quantity menor que 5. Para melhorar o desempenho desta consulta, você pode criar um índice no campo stock.quantity.

A seguinte operação cria um índice de múltiplas chaves ascendente no campo stock.quantity da coleção inventory:

db.inventory.createIndex( { "stock.quantity": 1 } )

Como o stock contém um valor de array, o MongoDB armazena este índice como um índice de múltiplas chaves.

O índice contém uma chave para cada valor individual que aparece no campo stock.quantity. O índice está subindo, o que significa que as chaves são armazenadas nesta ordem: [ 1, 4, 6, 7, 8, 10 ].

O índice suporta queries que selecionam no campo stock.quantity. Por exemplo, a query a seguir retorna documentos em que pelo menos um elemento na array stock tem quantity menor que 5:

db.inventory.find(
{
"stock.quantity": { $lt: 5 }
}
)

Saída:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
}
]

O índice também suporta operações de classificação no campo stock.quantity, como esta consulta:

db.inventory.find().sort( { "stock.quantity": -1 } )

Saída:

[
{
_id: ObjectId("63449793b1fac2ee2e957ef1"),
item: 't-shirt',
stock: [ { size: 'small', quantity: 8 }, { size: 'large', quantity: 10 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef2"),
item: 'sweater',
stock: [ { size: 'small', quantity: 4 }, { size: 'large', quantity: 7 } ]
},
{
_id: ObjectId("63449793b1fac2ee2e957ef3"),
item: 'vest',
stock: [ { size: 'small', quantity: 6 }, { size: 'large', quantity: 1 } ]
}
]

Ao classificar uma array de objetos, em uma classificação decrescente, o MongoDB classifica primeiro com base no campo com o elemento de maior valor.

Observação

Ordem de Classificação dos Índices

Para um índice de campo único, a ordem de classificação (crescente ou decrescente) da chave do índice não importa porque o MongoDB pode percorrer o índice em qualquer direção.

← Criar um Índice em um Campo de Array