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

Match To forskellige felter i Mongoose, Aggregate?

Du kan bruge følgende aggregering:

db.col.aggregate([
    {
        $addFields: {
            weightedIds: {
              $map:
                 {
                   input: "$weighted",
                   as: "w",
                   in: "$$w.phaseId"
                 }
            }
        }
    },
    {
      $project: {
        _id: 1,
        weighted: 1,
        phases: {
            $filter: {
             input: "$phases",
             as: "phase",
             cond: { $gte: [ { $indexOfArray: [ "$weightedIds" , "$$phase._id" ] }, 0 ] }
            }
        }
      }
    }
])

Vi bruger $map kun at tage phaseId felt af weighted og så kan vi filtrere phases fra ved hjælp af $filter kontrollerer for hver fase, om det svarer til id eksisterer (ved hjælp af $indexOfArray som ellers returnerer -1)




  1. Brug af MongoDB $pull til at slette dokumenter i et array

  2. Krypter Mongo-data i Meteorjs

  3. php-driver mongodb, aldrig indlæst

  4. Spil:Sådan transformerer du JSON, mens du skriver/læser det til/fra MongoDB