Mongoose findByIdAndUpdate() находит / возвращает объект, но не обновляет
Я пытаюсь найти и обновить с помощью этого кода:
exports.updatePlot = async (req, res) => {
let modifications = {};
modifications.name = req.body.name;
modifications.grower = req.body.props.grower;
modifications.variety = req.body.props.variety;
modifications.planted = req.body.props.planted;
const id = req.body.props.id;
try {
const updatedPlot = await Plot.findByIdAndUpdate(
id,
{ $set: { modifications } },
{ new: true }
);
res.json({
updatedPlot
});
} catch (e) {
return res.status(422).send({
error: { message: 'e', resend: true }
});
}
};
Я вижу, что мое тело запроса содержит данные, я также вижу, что Mongoose находит объект, но не обновляет его, потому что он регистрирует обновленный график:
{"_id":"id string here","name":"old name",...all other properties...}
Я полагаю, мой запрос искажен? Кто-нибудь видит мою ошибку?
Схема выглядит так:
const plotSchema = new Schema(
{
name: String,
...other properties...
},
{ bufferCommands: false }
);
const ModelClass = mongoose.model('plot', plotSchema);
2 ответа
Решение
Вы устанавливаете свой $set
возразить на это:
$set: {
modifications: {
name: 'xxx',
grower: 'xxx',
variety: 'xxx'
}
}
Однако, что вы хотите, чтобы это было:
$set: {
name: 'xxx',
grower: 'xxx',
variety: 'xxx'
}
Попробуйте удалить фигурные скобки на modifications
в запросе, вот так:
const updatedPlot = await Plot.findByIdAndUpdate(
id,
{ $set: modifications },
{ new: true }
);
Я думаю, что проблема в запросе, попробуйте это:
const updatedPlot = await Plot.findOneAndUpdate(
{_id: id},
modifications },
{ new: true }
);