【发布时间】:2020-01-29 22:46:03
【问题描述】:
我正在尝试更新我的对象数组中的值。 查看上面的 mongoDB 模式,我想要的是: 查找 ID 与 _id 匹配的费用,并需要使用 req.body 中的新字段更新字段。 只需要更新:费用类型、描述、价格和状态。
以下代码是我尝试做的。 首先,我需要匹配正确的费用,它可以正常工作,但是当我尝试 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");
});
});
*********** 分辨率 *********** 我只是按照下面显示的方式解决了问题。
House.updateOne(
{ "expensesHouse._id": id },
{
$set: {
expensesHouse: {
expenseType: req.body.expenseType,
description: req.body.description,
price: req.body.price,
status: req.body.status
}
}
}
【问题讨论】:
标签: javascript node.js mongodb mongodb-query