Die Sache ist die, wenn Sie eine lookup
durchführen mit pipeline
mit einer Übereinstimmungsstufe, dann würde der Index nur für die Felder verwendet, die mit dem $eq operator
abgeglichen werden und für den Rest wird der Index nicht verwendet.
Und das Beispiel, das Sie mit der Pipeline angegeben haben, funktioniert so (wieder wird der Index hier nicht verwendet, da er nicht verwendet wird $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Da Spieler ein Array von Objekten sind, muss es zuerst einem Array von IDs zugeordnet werden