Spec-Zone.ru › Mongoose

Документы

Документы 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API