Документы
Документы Mongoose отображают взаимно-однозначное соответствие с документами, хранящимися в MongoDB. Каждый документ является экземпляром своего модели.
Получение
Существует множество способов получения документов из MongoDB. Мы не будем рассматривать это в этом разделе. Подробнее см. главу о запросах.
Обновление
Существует ряд способов обновления документов. Сначала рассмотрим традиционный подход с использованием findById:
Tank.findById(id, function (err, tank) { if (err) return handleError(err); tank.size = 'large'; tank.save(function (err, updatedTank) { if (err) return handleError(err); res.send(updatedTank); }); });
Также можно использовать .set() для изменения документов. Под капотом, tank.size = 'large'; становится tank.set({ size: 'large' }).
Tank.findById(id, function (err, tank) { if (err) return handleError(err); tank.set({ size: 'large' }); tank.save(function (err, updatedTank) { if (err) return handleError(err); res.send(updatedTank); }); });
Этот подход включает в себя сначала получение документа из Mongo, а затем выполнение команды обновления (вызываемой с помощью save). Однако, если нам не нужен документ в нашем приложении и мы хотим просто обновить свойство в базе данных напрямую, Model#update подойдёт нам:
Tank.update({ _id: id }, { $set: { size: 'large' }}, callback);
Если нам всё-таки нужен документ в нашем приложении, есть ещё один, часто лучший, вариант:
Tank.findByIdAndUpdate(id, { $set: { size: 'large' }}, { new: true }, function (err, tank) {
if (err) return handleError(err);
res.send(tank);
});
Все статические методы findAndUpdate/Remove вносят изменения не более чем в один документ и возвращают его всего за один вызов базы данных. Существуют несколько вариантов темы findAndModify. Подробнее см. документацию API.
_Обратите внимание, что findAndUpdate/Remove не выполняют никакие хуки или валидации перед внесением изменений в базу данных. Можно использовать runValidators опцию для доступа к ограниченному подмножеству валидации документа. Однако, если вам нужны хуки и полная валидация документа, сначала запросите документ, а затем save() его._
Валидация
Документы валидируются перед сохранением. Подробнее см. документацию API или главу о валидации.
Перезапись
Вы можете перезаписать весь документ, используя .set(). Это полезно, если вы хотите изменить сохраняемый документ в средстве обработки запросов.
Tank.findById(id, function (err, tank) { if (err) return handleError(err); // Now `otherTank` is a copy of `tank` otherTank.set(tank); });
Далее
Теперь, когда мы рассмотрели Documents, давайте посмотрим на Поддокументы.
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/4.x/docs/documents.html