sql >> Databasteknik >  >> NoSQL >> MongoDB

Matcha Två olika fält i Mongoose, Aggregate?

Du kan använda följande 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 använder $map för att bara ta phaseId fält för weighted och sedan kan vi filtrera bort phases med $filter kontrollerar för varje fas om motsvarande id finns (med $indexOfArray vilket returnerar -1 annars)




  1. Lagra redis hget-värden i en variabel i nodejs

  2. Skapa Spring Data Aggregation från MongoDb aggregeringsfråga

  3. Fältfel i objekt 'mål' på fält '':avvisat värde []; koder [typeMismatch.target.,typeMismatch.,typeMismatch.java.util.Date,typeMismatch]

  4. bson.D vs bson.M för sökfrågor