Mongoose là ODM (Object Document Mapper) cho MongoDB — thêm schema, validation và middleware lên trên MongoDB vốn không ràng buộc cấu trúc.
Vài khái niệm cốt lõi:
- Middleware (hooks): chạy quanh thao tác — pre/post save, pre/post find... Dùng cho audit log, hash password.
- Virtuals: thuộc tính tính sẵn không lưu trong DB — vd fullName ghép từ firstName + lastName. Bật ra JSON bằng toJSON({ virtuals: true }).
- populate(): thay reference ObjectId bằng document thật — populate('author') lấy nguyên User. Cẩn thận N+1; kèm select để giới hạn field.
- lean(): trả về object JS thuần thay vì document Mongoose — nhanh hơn 2-3x; dùng khi chỉ cần đọc.
Lưu ý: Mongoose buffer các lệnh trước khi kết nối xong — phải xử lý lỗi kết nối cho đàng hoàng, kẻo lệnh treo lặng lẽ.