Sagen er, at når du laver et lookup ved hjælp af pipeline med et match-stadium, vil indekset kun blive brugt til de felter, der matches med $eq operator og for resten vil indeks ikke blive brugt.
Og det eksempel, du har angivet med pipeline, vil fungere sådan her (igen indekset vil ikke blive brugt her, da det ikke er $eq )
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Da spillere er et array af objekter, skal det kortlægges til array af id'er først