sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:búsqueda de tubería de rendimiento lento en comparación con la búsqueda básica

Lo que pasa es que cuando haces una lookup usando pipeline con una etapa de coincidencia, entonces el índice se usaría solo para los campos que coinciden con el operador $eq operator y para el resto no se utilizará índice.

Y el ejemplo que especificó con la canalización funcionará así (de nuevo, el índice no se usará aquí porque no lo es $eq operator )

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

Como los jugadores son una matriz de objetos, primero deben asignarse a una matriz de ID

Patio de juegos MongoDB