Пн goose Не сохраняется вложенные массивы / глубокие объекты с использованием функции .save () - PullRequest
0 голосов
/ 14 июля 2020

У меня есть MongoDB, и я использую API Mon goose.

У меня есть метод, который, я надеюсь, позволит мне найти «привычку» в моем пользовательском объекте. Привычка - это объект, который живет множеством привычек. Я передаю методу UUID, чтобы найти привычку.

Вот мой метод:

async updateHabit(req, res) {
    const { user_id } = req.headers
    const { habitId  } = req.params
    const habit = req.body
    
    const user = await User.findById(user_id)
  
    const habitIndex = user.habits.findIndex(habit => habit.id == habitId)

    user.habits[habitIndex] = habit

    console.log(user.habits)

    await user.save()

    return res.json(user.habits)
  }

Что странно, так это журнал консоли прямо над методом сохранения, в котором отображается самая последняя версия моего пользователя отображается правильно. Он регистрирует привычки пользователя с обновленной привычкой, заменяющей старую - по индексу, в котором жил старый.

Однако метод сохранения не записывает это в мою базу данных. У меня почти идентичный метод удаления, который работает нормально.

Я пробовал перейти с PUT на POST (думая: «ну, я действительно отправляю новый массив»), но это не так » т работы.

1 Ответ

0 голосов
/ 14 июля 2020

Возможно, вам потребуется явно указать изменение или свойство, которое вы изменили. Удивительно, как mon goose обрабатывает сохранение с вложенными или глубокими свойствами объекта. Вот документация на веб-сайте mon goose: проверьте здесь

В вашем случае вам может потребоваться сделать дополнительный шаг, который должен указать изменяемое свойство / путь, например:

user.markModified('habits')
await user.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...