Xử lý một trường ref trong Mongoose cho nhiều Model khác nhau
bài toán đưa ra như sau
- Ta muốn tách model user thành các model {‘User’, ‘Manager’, ‘Admin’, …} để tăng thêm mức độ bảo mật.
- Từ vấn đề này phát sinh ra việc tạo 1 tài khoản user không biết ref như thế nào trong ví dụ dưới đây:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
createdBy: {
type: mongoose.Schema.Types.ObjectId,
required: true,
// Thêm trường này để xác định loại người tạo
ref: 'User', // Có thể là User, có thể là Admin hoặc Manager
},
// Các trường khác...
});
// Ví dụ về cách tạo một instance
const User = mongoose.model('User', userSchema);[*] Hạn chế: Mongoose không hỗ trợ trực tiếp việc tham chiếu đến nhiều mô hình khác nhau trong cùng một trường.
—> Hướng giải quyết: ta bổ sung thêm trường type(cụ thể createdByType) với required: true cho model. Để khi tạo User thì tương ứng với mỗi type ta ref để đúng collection chứa Document cần ref