Mongoose: Что не так с моим findByIdAndUpdate? - PullRequest
0 голосов
/ 15 октября 2019

моя идея очень проста, это получить значение обновления от req.body, но оно не работает должным образом, данные никогда не меняются в mongodb.

уже пробовал {$ set: email, password}

    const id = { _id: req.params.id };
    const { email, password } = req.body;

    let user = await User.findByIdAndUpdate(id, { email, password });

    if (!user) {
        return res.json({ message: "error"});
    }

    return res.json({
        user: user,
        updated: true
    })

Ответы [ 2 ]

3 голосов
/ 15 октября 2019

вы передаете объект в id поле, когда все, что ему нужно, это строка / ObjectId

const { email, password } = req.body;

let user = await User.findByIdAndUpdate(req.params.id, { email, password });

if (!user) {
    return res.json({ message: "error"});
}

return res.json({
    user: user,
    updated: true
})
0 голосов
/ 15 октября 2019

Выражение:

    const id = { _id: req.params.id };

создает объект с именем id с полем _id, установленным на фактическое значение id из параметров. Таким образом, в конечном итоге вы передаете весь объект вместо идентификатора в первом аргументе функции findByIdAndUpdate, которая принимает идентификатор только в качестве первого параметра. Если вы все еще хотите использовать объект, просто замените id на id._id в методе findByIdAndUpdate. Который вы бы тогда написали как:

    let user = await User.findByIdAndUpdate(id._id, { email, password });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...