Javascript 在不更改其他对象的情况下更新mongodb
让我们看看下面的例子 我只想更新ExpensesHouse中的一条记录,因此我构建了以下代码Javascript 在不更改其他对象的情况下更新mongodb,javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,让我们看看下面的例子 我只想更新ExpensesHouse中的一条记录,因此我构建了以下代码 router.post("/editExpense/:id", ensureAuthenticated, (req, res) => { var id = mongoose.Types.ObjectId(req.params.id); House.updateOne( { "expensesHouse._id": id }, { $set: {
router.post("/editExpense/:id", ensureAuthenticated, (req, res) => {
var id = mongoose.Types.ObjectId(req.params.id);
House.updateOne(
{ "expensesHouse._id": id },
{
$set: {
expensesHouse: {
_id: id,
expenseType: req.body.expenseType,
description: req.body.description,
price: req.body.price,
status: req.body.status,
userID: req.user.id
}
}
}
).then(house => {
req.flash("success_msg", "Expenses Updated");
res.redirect("/houses/dashboard");
});
});
它工作正常,可以更新记录,但由于我有2个或更多的对象,所有其他对象都消失了。
因此,当我更新时,假设1:Object,expenseType:Water,我将费用类型更改为other,0:Object就消失了,我只需要用_id:id更新寄存器
下面您可以看到UpdateOne之后的结果
试试这个:
router.post("/editExpense/:houseId/:id", ensureAuthenticated, (req, res) => {
var id = mongoose.Types.ObjectId(req.params.id);
var houseId : mongoose.Types.ObjectId(req.params.houseId);
House.updateOne(
{ "_id": houseID, "expensesHouse._id": id },
{
$set: {
expensesHouse.$.expenseType: req.body.expenseType,
expensesHouse.$.description: req.body.description,
expensesHouse.$.price: req.body.price,
expensesHouse.$.status: req.body.status,
expensesHouse.$.userID: req.user.id
}
}
}
).then(house => {
req.flash("success_msg", "Expenses Updated");
res.redirect("/houses/dashboard");
});
});
不是这样的。如果我没有任何房屋id,你如何使用房屋id?文件上的第一个id不是房屋id?是的,但此id在这种情况下应该匹配(“expensesHouse.\u id”:id),并且匹配。我只是坐着思考你的解决方案,我在那里更改了一些东西,它就起作用了。我将更新问题并显示已解决的问题。感谢您的帮助:)houseId应该是查询的一部分,以提高性能。所以,如果只传递expensesHouseId,数据库将搜索数据库中的所有文档。但是,如果添加houseId参数,这将更快,并且消耗更少的内存和处理器。