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

Luwak bergabung dengan dua koleksi dan dapatkan data referensi di dua properti

Boleh dicoba,

  • $addFields untuk membuat larik unik bernama userIds bentuk kedua array followers dan followings , $setUnion untuk mendapatkan id unik,
  • $lookup dengan koleksi pengguna
  • $project untuk menampilkan bidang,
    • followers dapatkan fullName, $map untuk mengulangi loop followers dan dapatkan nama followerId dari array pengguna menggunakan $reduce dan $cond
    • followings dapatkan fullName, $map untuk mengulangi loop followings dan dapatkan nama followingId dari array pengguna menggunakan $reduce dan $cond
db.followings.aggregate([
  {
    $addFields: {
      userIds: {
        $setUnion: [
          {
            $map: {
              input: "$followers",
              in: "$$this.followerId"
            }
          },
          {
            $map: {
              input: "$followings",
              in: "$$this.followingId"
            }
          }
        ]
      }
    }
  },
  {
    $lookup: {
      from: "users",
      localField: "userIds",
      foreignField: "_id",
      as: "users"
    }
  },
  {
    $project: {
      userId: 1,
      followers: {
        $map: {
          input: "$followers",
          as: "f",
          in: {
            $mergeObjects: [
              "$$f",
              {
                fullName: {
                  $reduce: {
                    input: "$users",
                    initialValue: "",
                    in: {
                      $cond: [
                        { $eq: ["$$this._id", "$$f.followerId"] },
                        "$$this.fullName",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      },
      followings: {
        $map: {
          input: "$followings",
          as: "f",
          in: {
            $mergeObjects: [
              "$$f",
              {
                fullName: {
                  $reduce: {
                    input: "$users",
                    initialValue: "",
                    in: {
                      $cond: [
                        { $eq: ["$$this._id", "$$f.followingId"] },
                        "$$this.fullName",
                        "$$value"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

Taman bermain



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Urutan mongoid berdasarkan panjang array

  2. Menautkan &Membuat Gabungan MongoDB Menggunakan SQL:Bagian 2

  3. MongoDb Bagaimana mengelompokkan berdasarkan bulan dan tahun dari string

  4. Hasil kueri .find luwak berisi metadata kueri? tidak bisa secara manual memproyeksikan setiap properti koleksi, bagaimana cara mendapatkan dokumennya saja?

  5. Kueri untuk Mencocokkan Tanggal dalam Array