MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB:ricerca della pipeline a prestazioni lente rispetto alla ricerca di base

Il fatto è che quando esegui una lookup utilizzando pipeline con una fase di corrispondenza, l'indice verrebbe utilizzato solo per i campi che corrispondono a $eq operator e per il resto l'indice non verrà utilizzato.

E l'esempio che hai specificato con pipeline funzionerà in questo modo ( di nuovo l'indice non verrà utilizzato qui perché non lo è $eq )

db.matches.aggregate([
  {
    $lookup: {
      from: "players",
      let: {
        ids: {
          $map: {
            input: "$players",
            in: "$$this._id"
          }
        }
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $in: [
                "$_id",
                "$$ids"
              ]
            }
          }
        }
      ],
      as: "players"
    }
  }
])

Poiché i giocatori sono una matrice di oggetti, è necessario prima mapparli su una matrice di ID

parco giochi MongoDB