Работата е там, че когато направите lookup
използвайки pipeline
с етап на съвпадение, тогава индексът ще се използва само за полетата, които са съпоставени с $eq operator
а за останалите индексът няма да се използва.
И примерът, който посочихте с тръбопровод, ще работи по този начин ( отново индексът няма да се използва тук, тъй като не е $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Тъй като играчите са масив от обекти, първо трябва да бъдат съпоставени с масив от идентификатори