Lập mô hình một lược đồ Mongodb tốt thực sự phụ thuộc vào cách bạn truy cập dữ liệu của mình. Trong trường hợp được mô tả, bạn sẽ lập chỉ mục khóa Memberhips.user_id của mình, điều này có vẻ ổn. Nhưng kích thước tài liệu của bạn sẽ tăng lên khi bạn thêm người xem, người chỉnh sửa và quản trị viên. Ngoài ra, lược đồ của bạn sẽ gây khó khăn khi thực hiện các truy vấn như:
Các dự án truy vấn, trong đó user_id xxx là trình soạn thảo:
Một lần nữa, bạn có thể không cần truy vấn các dự án như thế này, vì vậy lược đồ của bạn trông vẫn ổn. Nhưng nếu bạn cần truy vấn các dự án của mình theo vai trò của user_id VÀ, tôi khuyên bạn nên tạo bộ sưu tập 'project_membership':
db.project_memberships.insert(
{
"project_id" : ObjectId("4d730fcfcedc351d67000032"),
"editors" : [
ObjectId("4d730fcfcedc351d67000002"),
ObjectId("4d730fcfcedc351d67000004")
],
"viewers" : [
ObjectId("4d730fcfcedc351d67000002"),
ObjectId("4d730fcfcedc351d67000004"),
ObjectId("4d730fcfcedc351d67000001"),
ObjectId("4d730fcfcedc351d67000005")
],
"administrator" : [
ObjectId("4d730fcfcedc351d67000011"),
ObjectId("4d730fcfcedc351d67000012")
]
}
)
db.project_memberships.ensureIndex({"editors": 1})
db.project_memberships.ensureIndex({"viewers": 1})
db.project_memberships.ensureIndex({"administrator": 1})
Hoặc thậm chí dễ dàng hơn ... thêm chỉ mục trên lược đồ dự án của bạn:
db.projects.ensureIndex({"memberships.role": 1})