Я пытаюсь ОБНОВИТЬ поля в базе данных монго. Тем не менее, я получаю ошибку полого.
MongoError: Performing an update on the path '_id' would modify the immutable field '_id'
Мой код для обновления.
app.put("/api/inventory/:sku", (req, res, next) => {
const inventory = new Inventory({
_id: req.body.id,
sku: req.body.sku,
total_qty: req.body.total_qty,
current_qty: req.body.current_qty
});
Inventory.updateOne({ sku: req.params.sku }, req.body).then(result => {
res.status(200).json({ message: "Update successful!" });
});
});
_id
создается автоматически — более подробное объяснение того, что это такое, см. в статье этот ответ.
Вы не можете создать это поле — оно создается при создании любого нового документа. Вам нужно использовать поле id
(без подчеркивания в начале _
):
const inventory = new Inventory({
id: req.body.id,
sku: req.body.sku,
total_qty: req.body.total_qty,
current_qty: req.body.current_qty
});
Кажется, вам нужно обновить только одну Inventory
запись. Вы можете просто сделать это:
app.put("/api/inventory/:sku", (req, res, next) => {
return Inventory.updateOne(
{ sku: req.params.sku }, // <-- find stage
{ $set: { // <-- set stage
id: req.body.id, // <-- id not _id
sku: req.body.sku,
total_qty: req.body.total_qty,
current_qty: req.body.current_qty
}
}
).then(result => {
res.status(200).json({ message: "Update successful!" });
});
});
Нет необходимости создавать новые Inventory
и т. д., поскольку все, что вам нужно, это обновить существующий на основе sku
.
Вот дополнительная документация по updateOne
В этом руководстве по mongoDB: mongodb.com/blog/post/paging-with-the-bucket-pattern--part-2. запрос updateOne влияет на ключ «_id», поэтому мой вопрос в том, почему этот пример работает, а этот не работает, это проблема с драйвером.