sql >> Database >  >> NoSQL >> MongoDB

Mongoose sluit zich aan bij twee collecties en krijgt alleen specifieke velden uit de samengevoegde collectie

Je kunt het proberen,

  • $lookup met students collectie
  • $project om verplichte velden te tonen, $map om de lus van de top10-array te herhalen en binnenin gebruik $reduce om de volledige naam van studenten te krijgen en samen te voegen met het top10-object met behulp van $mergeObjects
db.exams.aggregate([
  {
    $lookup: {
      from: "students",
      localField: "top10.studentId",
      foreignField: "_id",
      as: "students"
    }
  },
  {
    $project: {
      test: 1,
      students: {
        $map: {
          input: "$top10",
          as: "top10",
          in: {
            $mergeObjects: [
              "$$top10",
              {
                fullname: {
                  $reduce: {
                    input: "$students",
                    initialValue: 0,
                    in: {
                      $cond: [
                        { $eq: ["$$this._id", "$$top10.studentId"] },
                        "$$this.fullname",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

Speeltuin

Tweede optie die je kunt gebruiken $unwind voor $lookup ,

  • $unwind deconstrueren top10 reeks
  • $lookup met students collectie
  • $addFields om leerlingenarray naar object te converteren met behulp van $arrayElemtAt
  • $group door _id en construeer studentenarray en push vereiste velden
db.exams.aggregate([
  { $unwind: "$top10" },
  {
    $lookup: {
      from: "students",
      localField: "top10.studentId",
      foreignField: "_id",
      as: "students"
    }
  },
  { $addFields: { students: { $arrayElemAt: ["$students", 0] } } },
  {
    $group: {
      _id: "$_id",
      test: { $first: "$test" },
      students: {
        $push: {
          studentId: "$top10.studentId",
          score: "$top10.score",
          fullname: "$students.fullname"
        }
      }
    }
  }
])

Speeltuin




  1. C# mongodb - hoe geneste array-elementen bij te werken

  2. req.body is ongedefinieerde gemiddelde app

  3. 'process.nextTick(function() { throw err; })' - Undefined is geen functie (mongodb/mongoose)

  4. Mongo db c#-stuurprogramma - hoe lid te worden via id in verzameling?