Le fait est que lorsque vous faites une lookup
en utilisant pipeline
avec une étape de correspondance, l'index ne serait utilisé que pour les champs correspondant à l'$eq operator
et pour le reste l'index ne sera pas utilisé.
Et l'exemple que vous avez spécifié avec pipeline fonctionnera comme ceci ( encore une fois l'index ne sera pas utilisé ici car il ne l'est pas $eq
)
db.matches.aggregate([
{
$lookup: {
from: "players",
let: {
ids: {
$map: {
input: "$players",
in: "$$this._id"
}
}
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$_id",
"$$ids"
]
}
}
}
],
as: "players"
}
}
])
Comme les joueurs sont un tableau d'objets, ils doivent d'abord être mappés sur un tableau d'identifiants