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