intermediate
Models
Представляйте collection operations через compiled models и понимайте разницу между queries, documents и lean results.
Модель Mongoose — скомпилированная схема, привязанная к коллекции. Создаёт документы, выполняет запросы, применяет middleware и возвращает hydrated-документы, если не использован `.lean()`.
| Тип результата | Поведение | |----------------|-----------| | Hydrated document | Методы, отслеживание изменений, middleware | | Lean plain object | Быстрее чтение, без методов Mongoose |
const Order = model('Order', orderSchema);
const doc = await Order.findById(id); // hydrated
const row = await Order.findById(id).lean(); // plain object
На интервью: компиляция на соединение, момент выполнения запроса, цена hydration, document vs static methods.
Типовые ошибки: hydrated-документы в read-heavy API; перекомпиляция моделей при hot reload без guard; ожидание выполнения запроса при создании query object.
Компромисс — удобство и middleware против памяти и стоимости сериализации.
Чеклист:
- Знайте, когда запрос реально выполняется.
- Используйте lean для read-heavy plain objects.
- Управляйте регистрацией модели на соединение.
- Разделяйте persistence-документы и DTO API.