Tôi đề nghị sử dụng cách tiếp cận này.
Bạn nên có một Schemas
riêng biệt cho Account
, Teacher
và Student
vì vậy thông tin khác nhau giữa giáo viên và học sinh không được trộn lẫn vào một nơi.
Tài khoản
var Account = new Schema({
email:String,
password:String,
_teacher:{type:Schema.Types.ObjectId, ref:'Teacher'},
_student:{type:Schema.Types.ObjectId, ref:'Student'}
})
Trong tài khoản, bạn nên tham chiếu mô hình Giáo viên nếu tài khoản giáo viên nếu không thì tham chiếu mô hình Học sinh.
Để kiểm tra xem Account
là Teacher
hoặc Student
bạn chỉ cần kiểm tra _teacher
, nếu nó có giá trị thì đó là Teacher
tài khoản khác đó là một sinh viên. Nhưng để làm cho điều kiện độc đáo hơn, bạn hãy kiểm tra cả _teacher
và _student
.
Cách tiếp cận này sẽ giúp bạn tiết kiệm rất nhiều việc tái cấu trúc trong tương lai nếu bạn quyết định cho phép giáo viên trở thành học sinh (điều này không phải là không thể xảy ra), họ chỉ có thể sử dụng cùng một tài khoản và đăng ký làm học sinh. Cũng giống như những gì google đang làm, trên tài khoản / email có nhiều loại ứng dụng để sử dụng.
Giáo viên
var Teacher = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other teachers info
})
Sinh viên
var Student = new Schema({
name:{type:Schema.Types.ObjectId, ref:'Name'}
// Other students info
})
Tên
Về phần này, có thể bạn đang tự hỏi tại sao bạn cần một mô hình riêng cho tên. Đó là bởi vì trong cách tiếp cận này, bạn chỉ có thể sử dụng một route
hoặc endpoint
hoặc query
để tìm kiếm người dùng trên ứng dụng của bạn. Khi bạn tìm kiếm tên, tất cả học sinh và giáo viên có kết quả phù hợp sẽ được truy vấn mà không cần xem xét 2 bộ sưu tập khác nhau (Bộ sưu tập giáo viên và Bộ sưu tập học sinh).
Về trường hợp sử dụng tốt cho điều này, chắc chắn bạn sẽ có bảng điều khiển quản trị nơi bạn có thể quản lý tất cả học sinh và giáo viên. Trong bảng điều khiển đó, bạn chỉ có thể có một trường tìm kiếm cho cả giáo viên và học sinh.
var Name = new Schema({
firstName:String,
middleName:String,
lastName:String
})
Sách hay
Các mẹo khác
Bạn cũng có thể tách Address
như tôi đã làm với tên ở đây. Lý do? Mục đích tương tự như với Name
, bạn có thể muốn thêm tính năng tìm kiếm theo vị trí hoặc tương tự như vậy.
Tôi hy vọng điều này sẽ hữu ích.