Редактирование элемента mongoDB не обновляется, но не появляется ошибка - PullRequest
0 голосов
/ 27 апреля 2020

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

Однако, когда я пытаюсь редактировать заметки, обновление не сохранить в базе данных. Я не получаю сообщение об ошибке, и когда я получаю в результате console.log результат, он отображает правильные данные, но, кажется, просто не отправляет их в базу данных. Я использовал mon goose и findByIdAndUpdate. Вот код JavaScript для моего маршрута обновления

app.put("/:id", (req, res) => {
Note.findByIdAndUpdate(req.params.id, req.body.note, (err, updatedNote) => {

    if(err) {
        console.log(err);
    } else {
        res.redirect(`/${req.params.id}`);
        console.log(req.params.id);
        console.log(req.body.note);
        console.log("note updated");
    }
});

});

Как я уже говорил, я не получаю никакой ошибки, и console.logs возвращает правильный идентификатор и обновленное содержимое , Все мои маршруты ведут меня к месту, поэтому я не верю, что есть проблема с ними. Любая помощь будет принята с благодарностью. Я также могу предоставить больше кода при необходимости

Заранее спасибо

Будет

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

При обновлении в MongoDB вы должны ссылаться на поле, которое вы пытаетесь обновить. Ваш код должен выглядеть следующим образом

app.put("/:id", (req, res) => {
Note.findByIdAndUpdate(req.params.id, {text: req.body.note}, (err, updatedNote) => {

    if(err) {
        console.log(err);
    } else {
        res.redirect(`/${req.params.id}`);
        console.log(req.params.id);
        console.log(req.body.note);
        console.log("note updated");
    }
});
});

PS: Я надеюсь, что поле в модели БД называется text


Чтобы код выглядел более сексуально, вы можете переключиться это в Async / Await

app.put("/:id", async (req, res) => {
       let updatedNote = await Note.findByIdAndUpdate(req.params.id, {text: 
       req.body.note}, {new: true}).catch(err => console.log(err))

        res.redirect(`/${req.params.id}`);
        console.log(req.params.id);
        console.log(req.body.note);
        console.log("note updated");
});
0 голосов
/ 27 апреля 2020

То, что updatedNote такое же, как и до обновления, ожидается поведение - см. Документы mongooe :

По умолчанию findOneAndUpdate () возвращает документ таким, каким он был до применения обновления. Если вы установите new: true, вместо этого findOneAndUpdate () выдаст вам объект после применения обновления.

Это не означает, что обновление не произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...