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 }
        );
Другие вопросы по тегам