sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:pipelineuppslag med långsam prestanda jämfört med grundläggande uppslag

Saken är att när du gör en lookup med pipeline med ett matchningssteg skulle indexet endast användas för de fält som matchas med $eq operator och i övrigt kommer index inte att användas.

Och exemplet du angav med pipeline kommer att fungera så här (igen index kommer inte att användas här eftersom det inte gör det $eq )

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

Eftersom spelare är en array av objekt så måste den mappas till array av id först

MongoDB Playground



  1. Mongoose Schema har inte registrerats för modell

  2. Mongoose med mongodb hur returnerar man just sparat objekt?

  3. Spara arrayer i Mongoose-schema

  4. Prestanda för Mongo DB-uppdateringsfrågor