O problema é que quando você faz uma
lookup
usando pipeline
com um estágio de correspondência, o índice seria usado apenas para os campos que correspondem ao $eq operator
e para o resto o índice não será usado. E o exemplo que você especificou com pipeline funcionará assim ( novamente o índice não será usado aqui porque não é
$eq
) db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Como players é uma matriz de objetos, ele precisa ser mapeado para uma matriz de ids primeiro
MongoDB Playground