MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongoose tham gia hai bộ sưu tập và nhận dữ liệu được tham chiếu trong hai thuộc tính

Bạn có thể thử,

  • $addFields để tạo một mảng duy nhất được gọi là userIds tạo thành cả hai mảng followersfollowings , $setUnion để nhận các id duy nhất,
  • $lookup với bộ sưu tập của người dùng
  • $project để hiển thị các trường,
    • followers lấy fullName, $ map để lặp lại vòng lặp của followers và lấy tên của followerId từ mảng người dùng bằng cách sử dụng $reduce$cond
    • followings lấy fullName, $ map để lặp lại vòng lặp của followings và lấy tên của followingId từ mảng người dùng bằng cách sử dụng $reduce$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"
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

Sân chơi



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Các bước cài đặt MongoDB trên Amazon Linux

  2. Làm cách nào để Đảm bảo Nhóm MongoDB của bạn có thể sống sót khi Amazon AWS ngừng hoạt động?

  3. Lỗi trong khi mongoimport

  4. Truy vấn MongoDB cho các bản ghi có trường không tồn tại và lập chỉ mục

  5. Bộ lọc quản trị django và mongodb:Bắt cơ sở dữ liệu Lỗi khi kết xuất:Truy vấn này không được cơ sở dữ liệu hỗ trợ