Chodzi o to, że kiedy robisz lookup
za pomocą pipeline
z etapem dopasowania, indeks byłby używany tylko dla pól, które są dopasowane za pomocą $eq operator
a dla reszty indeks nie będzie używany.
A przykład, który określiłeś dla potoku, będzie działał tak (ponownie indeks nie będzie tutaj używany, ponieważ tak nie jest $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Ponieważ gracze są tablicą obiektów, muszą być najpierw zmapowane do tablicy identyfikatorów