Het punt is dat wanneer je een lookup
met behulp van pipeline
met een match-fase, dan zou de index alleen worden gebruikt voor de velden die overeenkomen met de $eq operator
en voor de rest wordt de index niet gebruikt.
En het voorbeeld dat u met pijplijn hebt opgegeven, werkt als volgt ( weer index zal hier niet worden gebruikt omdat dit niet het geval is $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Omdat spelers een reeks objecten is, moet deze eerst worden toegewezen aan een reeks id's