Dùng schema validation ở tầng database bằng $jsonSchema.
Đây là lớp bảo vệ cuối, độc lập với validation của Mongoose/ứng dụng — quan trọng vì script thủ công và job nền thường ghi thẳng vào DB, không đi qua ORM.
js
db.createCollection('orders', {
validator: {
$jsonSchema: {
bsonType: 'object',
required: ['userId', 'total', 'status'],
properties: {
userId: { bsonType: 'objectId' },
total: { bsonType: 'int', minimum: 0 },
status: { enum: ['pending', 'paid', 'cancelled'] }
}
}
},
validationLevel: 'moderate',
validationAction: 'error'
})Hai tham số quyết định hành vi:
- validationLevel: strict áp cho mọi insert/update; moderate chỉ áp cho document mới và document cũ đã hợp lệ — đúng cho collection đang có dữ liệu cũ chưa chuẩn hóa.
- validationAction: error từ chối ghi; warn vẫn ghi nhưng ghi log — dùng khi triển khai dần để đo mức độ vi phạm trước khi siết.
Cách áp dụng an toàn cho collection đang chạy: bật warn + moderate, đọc log để dọn dữ liệu cũ, sau đó mới chuyển sang error/strict.