Lo que pasa es que cuando haces una lookup
usando pipeline
con una etapa de coincidencia, entonces el índice se usaría solo para los campos que coinciden con el operador $eq operator
y para el resto no se utilizará índice.
Y el ejemplo que especificó con la canalización funcionará así (de nuevo, el índice no se usará aquí porque no lo es $eq operator
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Como los jugadores son una matriz de objetos, primero deben asignarse a una matriz de ID