sql >> Database >  >> NoSQL >> MongoDB

Match Twee verschillende velden in Mongoose, Aggregate?

U kunt de volgende aggregatie gebruiken:

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 ] }
            }
        }
      }
    }
])

We gebruiken $map om alleen phaseId . te nemen veld van weighted en dan kunnen we phases eruit filteren met behulp van $filter voor elke fase controleren of de corresponderende id bestaat (met behulp van $indexOfArray die anders -1 retourneert)




  1. Express js, mongodb:ReferenceError:db is niet gedefinieerd wanneer db wordt vermeld buiten de post-functie

  2. Meteor, MongoDB krijgen deel van array via abonnement

  3. MongoDB-melding in Python

  4. Mongodb sorteren met hoofdletterongevoelige manier