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

MongoDB - tài liệu người dùng của tôi có nên chứa danh sách id dự án không?

Người dùng user có thể có nhiều projects (và một dự án chỉ được liên kết với một người dùng). Đây là một-nhiều mối quan hệ.


Mọi user nên lưu trữ danh sách các projects của anh ấy / cô ấy . Ví dụ:

user:
    id: <some value>,
    name: <some value>,
    email: <some value>,
    projects: [
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
        { projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
         ...
    ]

Lưu ý rằng mỗi projects là một tài liệu con (đối tượng hoặc tài liệu nhúng) trong các dự án user mảng. Một projects có các chi tiết liên quan như, projectId , projectName , v.v ..


Tôi nghĩ, chỉ nên có một bộ sưu tập được gọi là user_projects . Giả sử rằng:(i) một user có thể có 0 đến 100 dự án và (ii) một projects chi tiết của không quá lớn.

Đây là một mô hình nhúng bên 'nhiều' của mối quan hệ 1-N vào bên 'một'. Đây là cách được khuyến nghị, khử chuẩn hóa dữ liệu. Điều này có lợi thế là các truy vấn hiệu quả và nhanh chóng. Điều này đơn giản hóa các giao dịch, vì việc ghi (chèn, cập nhật và xóa) sẽ trở thành nguyên tử với một thao tác duy nhất đối với một tài liệu trong cùng một bộ sưu tập.


Bạn sẽ sử dụng user id hoặc name (với một chỉ mục duy nhất) để truy xuất một tài liệu và nó sẽ được truy vấn rất nhanh. Bạn có thể có chỉ mục trên các dự án user mảng (chỉ mục trên các trường mảng được gọi là Chỉ mục nhiều khóa ) - trên các lĩnh vực của dự án. Ví dụ:lập chỉ mục trên projectId hoặc / và projectName có lý.

Bạn có thể nhận tất cả các dự án cho một người dùng - đó là một truy vấn đơn giản bằng cách sử dụng user id / name . Truy vấn chiếu cho phép thông tin nào liên quan đến projects được hiển thị. Bạn có thể sử dụng find hoặc aggregate để tạo truy vấn.Bạn có thể truy vấn một projects cụ thể cho người dùng user , sử dụng projectId hoặc projectName . Vì có chỉ mục trên userprojects , đây sẽ là một truy vấn hiệu quả.

Vì vậy, đề xuất của tôi là nên có một bộ sưu tập duy nhất, user_projects , với user thông tin của và projects thông tin được nhúng trong đó.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lọc Năm tháng từ tài liệu Mongo

  2. MongoDB Nhập hàng loạt bằng cách sử dụng mongoimport từ thư mục Windows

  3. Dữ liệu mùa xuân MongoDB:Phép chiếu và Tổng hợp

  4. MongoDB $ isoDayOfWeek

  5. Cách giải quyết com.mongodb.spark.exceptions.MongoTypeConversionException:Không thể truyền ... Java Spark