MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :recherche de pipeline de performances lente par rapport à la recherche de base

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

MongoDB Playground