MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Agregasi MongoDb untuk memfilter daftar berdasarkan id yang ada di objek array dari semua dokumen dari koleksi yang sama

Boleh dicoba,

  • $facet untuk membuat 2 array, users nama detail pengguna dan studentId, kedua detail semua pengguna di allUsers
  • $project ulangi loop
    • $map masukan sebagai array allUsers
    • $map masukan sebagai array yang direferensikan siswa
    • $map masukan sebagai array siswa
    • $reduce untuk mendapatkan data siswa dari users array ketika kondisi cocok
  • $unwind dekonstruksi array allUsers
  • $replaceWith ganti objek allUsers di root
db.collection.aggregate([
  {
    $facet: {
      users: [
        {
          $project: {
            studentId: 1,
            name: 1
            // add fields as you want it will automatically reflect in join
          }
        }
      ],
      allUsers: []
    }
  },
  {
    $project: {
      allUsers: {
        $map: {
          input: "$allUsers",
          in: {
            $mergeObjects: [
              "$$this",
              {
                studentsReffered: {
                  $map: {
                    input: "$$this.studentsReffered",
                    in: {
                      $mergeObjects: [
                        "$$this",
                        {
                          students: {
                            $map: {
                              input: "$$this.students",
                              as: "s",
                              in: {
                                $reduce: {
                                  input: "$users",
                                  initialValue: { studentId: "$$s.studentId" },
                                  in: {
                                    $cond: [
                                      { $eq: ["$$this.studentId", "$$s.studentId"] },
                                      "$$this",
                                      "$$value"
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  },
  { $unwind: "$allUsers" },
  { $replaceWith: "$allUsers" }
])

Taman bermain




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hentikan Replika Set MongoDB

  2. cara memperbarui objek bersarang dari dokumen luwak hanya untuk kunci yang disediakan

  3. MongoDB $setIntersection

  4. Cara mengonfigurasi spring-data-mongodb untuk menggunakan set replika melalui properti

  5. Perbedaan antara menyimpan ObjectId dan bentuk stringnya, di MongoDB