MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB:pesquisa de pipeline de desempenho lento em comparação com pesquisa básica


O problema é que quando você faz uma lookup usando pipeline com um estágio de correspondência, o índice seria usado apenas para os campos que correspondem ao $eq operator e para o resto o índice não será usado.

E o exemplo que você especificou com pipeline funcionará assim ( novamente o índice não será usado aqui porque não é $eq )
db.matches.aggregate([
  {
    $lookup: {
      from: "players",
      let: {
        ids: {
          $map: {
            input: "$players",
            in: "$$this._id"
          }
        }
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $in: [
                "$_id",
                "$$ids"
              ]
            }
          }
        }
      ],
      as: "players"
    }
  }
])

Como players é uma matriz de objetos, ele precisa ser mapeado para uma matriz de ids primeiro

MongoDB Playground