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

mô hình mongoose cho nhiều loại người dùng

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 , TeacherStudent 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 AccountTeacher 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_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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Có thể thay đổi TimeZone mặc định trong MongoDB bằng Rails 3 không?

  2. sắp xếp mongodb và truy vấn regex theo cách hiệu quả

  3. Tạo MongoDB ObjectID từ ngày trước bằng trình điều khiển PHP

  4. Mongoose điền tài liệu phụ phụ

  5. Bên ngoài Laravel hùng hồn với jenssegers / laravel-mongodb nhiều kết nối DB