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

MongoDB:Pipeline-opslag med langsom ydeevne sammenlignet med grundlæggende opslag

Sagen er, at når du laver et lookup ved hjælp af pipeline med et match-stadium, vil indekset kun blive brugt til de felter, der matches med $eq operator og for resten vil indeks ikke blive brugt.

Og det eksempel, du har angivet med pipeline, vil fungere sådan her (igen indekset vil ikke blive brugt her, da det ikke er $eq )

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

Da spillere er et array af objekter, skal det kortlægges til array af id'er først

MongoDB Playground



  1. Hvordan kan jeg gemme tidspunktet på dagen i MongoDB? Som en snor? Giv vilkårligt år/måned/dag?

  2. Mongoose opdaterer ikke mit dokument, hvis jeg ikke har nogen tilbagekaldsfunktion

  3. Redis opdaterer ikke, når mange forespørgsler på én gang

  4. The ABCs of NestJS:A Beginner's Guide with MongoDB (Mongoose).