Обновление документа MongoDB занимает два раза

#node.js #mongoose

#node.js #мангуст

Вопрос:

У меня есть эта схема:

 const opening_hourSchema = new Schema({
    sunday:         {open: { type: Boolean, default: true}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    monday:         {open: { type: Boolean, default: true}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    tuesday:        {open: { type: Boolean, default: true}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    wednesday:      {open: { type: Boolean, default: true}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    thursday:       {open: { type: Boolean, default: true}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    friday:         {open: { type: Boolean, default: false}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
    saturday:       {open: { type: Boolean, default: false}, from: { type: String, default: "10:00"}, to: { type: String, default: "19:00"} },
}
, { timestamps: true });
 

Я хочу обновить его с помощью объекта, который выглядит следующим образом:

 opening_hours:
friday: {open: false, from: "06:20", to: "13:00"}
monday: {open: false, from: "02:00", to: "09:00"}
saturday: {open: false, from: "07:00", to: "14:00"}
sunday: {open: false, from: "01:00", to: "08:00"}
thursday: {open: false, from: "05:00", to: "12:00"}
tuesday: {open: false, from: "03:00", to: "10:00"}
wednesday: {open: false, from: "04:00", to: "11:00"}
__proto__: Object
_id: "5fbd18517954d20024a132b4"
 

Это моя функция для выполнения обновления.

 router.post('/set-open-hours', auth, function (req, res) {
  OpeningHours.findByIdAndUpdate(req.body._id , req.body.opening_hours)
  .then((opening_hours) => {
    res.json(opening_hours)
  })
  .catch(err => res.status(400).json("Error2: "   err));
})
 

Странно то, что это работает, но по какой-то причине требуется две попытки. Если я вызову функцию один раз, она вернет старый объект. По какой-то причине во второй раз он вернет правильный объект.

Комментарии:

1. после вызова этой функции один раз, не могли бы вы проверить результат в базе данных. скажите мне, что это показывает.

2. потому что я хочу убедиться, что данные обновляются или нет.

Ответ №1:

Это связано с тем, что метод findByIdAndUpdate() возвращает значение, соответствующее условию перед операцией обновления.

 Model.findByIdAndUpdate(id, updateObj, {new: true})
 

{new: true} это вернет обновленный результат.