Saken är att när du gör en lookup
med pipeline
med ett matchningssteg skulle indexet endast användas för de fält som matchas med $eq operator
och i övrigt kommer index inte att användas.
Och exemplet du angav med pipeline kommer att fungera så här (igen index kommer inte att användas här eftersom det inte gör det $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Eftersom spelare är en array av objekt så måste den mappas till array av id först