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

Tổng hợp MongoDb để lọc danh sách dựa trên id có trong đối tượng của mảng từ tất cả tài liệu của cùng một bộ sưu tập

Bạn có thể thử,

  • $facet để tạo 2 mảng, users tên chi tiết người dùng và studentId, thứ hai là tất cả chi tiết người dùng trong allUsers
  • $project lặp lại vòng lặp
    • $map đầu vào dưới dạng mảng allUsers
    • $map nhập với tư cách là sinh viênMảng được giới thiệu
    • $map đầu vào dưới dạng mảng sinh viên
    • $reduce để lấy dữ liệu của học sinh từ users mảng khi điều kiện phù hợp
  • $unwind giải cấu trúc mảng allUsers
  • $replaceWith thay thế đối tượng allUsers trong thư mục gốc
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" }
])

Sân chơi




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm kiếm toàn bộ và một phần văn bản trong MongoDB

  2. Làm cách nào để tăng hiệu suất của hoạt động cập nhật trong Mongo?

  3. Phần tử mảng cập nhật Mongo (trình điều khiển .NET 2.0)

  4. Không thể tính toán thời gian trung bình

  5. MongoDB, Mongoose:Làm cách nào để tìm tài liệu phụ trong tài liệu đã tìm thấy?