Temos uma coleção em nosso MongoDB onde, devido a uma alteração no caso de uso, uma consulta até agora pequena agora está muito lenta. O agregado em questão é mais ou menos assim:
db.collection.aggregate([
{
$match: {
"_id": {
$in: [ list of 1000 ids ]
}
}
},
{
$unwind: "array_field"
},
{
$match: {
"array_field.sub_field": 123456789
}
}
])
Minha pergunta agora é: um índice como esse seria {"_id": 1, "array_field.sub_field": 1}
levado em consideração aqui ou é necessário fazer com que os desenvolvedores movam o segundo $match
para o primeiro?
Infelizmente, um retrabalho do modelo de dados não estará disponível em um futuro próximo.
Você pode construir um pequeno PoC para verificar o uso do índice. O índice será alavancado, pois é construído em conformidade com a regra ESR.
Explique a saída:
Você pode ver
IXSCAN
a presença de e isso significa que o índice está alavancado.Parque Mongo
No entanto, ainda é recomendado que os desenvolvedores movam o
$match
estágio o mais cedo possível, pois isso ajuda a minimizar o tamanho intermediário do resultado e, assim, melhorar o desempenho.Parque infantil Mongo