Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不更改其他对象的情况下更新mongodb_Javascript_Node.js_Mongodb_Mongodb Query - Fatal编程技术网

Javascript 在不更改其他对象的情况下更新mongodb

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: {

让我们看看下面的例子

我只想更新ExpensesHouse中的一条记录,因此我构建了以下代码

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参数,这将更快,并且消耗更少的内存和处理器。