Я пытаюсь обновить значение в моем массиве объектов. Глядя на приведенную выше схему mongoDB, я хочу найти: найдите расходы с идентификатором, совпадающим с _id, и нужно обновить поля новыми с помощью req.body. Просто нужно обновить: costType, описание, цену и статус.
Следующий код - это то, что я пытался сделать. Во-первых, мне нужно сопоставить правильный расход, и он работает нормально, но когда я пытаюсь, чтобы house.save () показывал мне сообщение «house.save не является функцией». Поэтому я думаю, что, возможно, мне нужно использовать функцию mongoDB, чтобы получить результат.
router.put("/editExpense/:id", ensureAuthenticated, (req, res) => {
var id = mongoose.Types.ObjectId(req.params.id);
House.find(
{ "expensesHouse._id": id },
{
members: 1,
name: 1,
description: 1,
address: 1,
type: 1,
user: 1,
userID: 1,
userType: 1,
expensesHouse: { $elemMatch: { _id: id } },
date: 1
}
).then(house => {
console.log(house);
expenseType = req.body.expenseType;
description = req.body.description;
price = req.body.price;
status = req.body.status;
house.save().then(() => {
req.flash("success_msg", "Expenses Updated");
res.redirect("/houses/dashboard");
});
});
});
****** ОБНОВЛЕНО ******
После поиска я нашел это updateOne и после настройки, это мой окончательный результат, но таким образом я удаляю каждую запись ..
router.put("/editExpense/:id", ensureAuthenticated, (req, res) => {
var id = mongoose.Types.ObjectId(req.params.id);
House.updateOne(
{ "expensesHouse._id": id },
{
members: 1,
name: 1,
description: 1,
address: 1,
type: 1,
user: 1,
userID: 1,
userType: 1,
expensesHouse: { $elemMatch: { _id: id } },
date: 1
},
{ $set: { "expensesHouse.expenseType": req.body.expenseType } }
).then(house => {
req.flash("success_msg", "Expenses Updated");
res.redirect("/houses/dashboard");
});
});
*********** RESOLUTION ********** * Я только что решил проблему, как показано ниже.
House.updateOne(
{ "expensesHouse._id": id },
{
$set: {
expensesHouse: {
expenseType: req.body.expenseType,
description: req.body.description,
price: req.body.price,
status: req.body.status
}
}
}