Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Node.js Express未将更新的行保存到数据库_Node.js_Mongodb_Express_Mongoose_Updates - Fatal编程技术网

Node.js Express未将更新的行保存到数据库

Node.js Express未将更新的行保存到数据库,node.js,mongodb,express,mongoose,updates,Node.js,Mongodb,Express,Mongoose,Updates,我在Express和NodeJS中有一个函数,可以在其中切换项的布尔值。因此,当调用该函数时,布尔值将被交换为另一个值。我做了一个console.log的布尔运算。MongoDB中的对象没有得到更新。我有一个Post、Get和GetAll请求,请求同一个对象到MongoDB和来自MongoDB,它们都可以工作。因此,与数据库的连接没有问题 router.post("/payed/:id", (req, res) => { Item.findOne({ _id: re

我在Express和NodeJS中有一个函数,可以在其中切换项的布尔值。因此,当调用该函数时,布尔值将被交换为另一个值。我做了一个console.log的布尔运算。MongoDB中的对象没有得到更新。我有一个Post、Get和GetAll请求,请求同一个对象到MongoDB和来自MongoDB,它们都可以工作。因此,与数据库的连接没有问题

router.post("/payed/:id", (req, res) => {
  Item.findOne({ _id: req.params.id }, (err, item) => {
    item.childeren.forEach((child) => {
      if (child.name === req.body.name) {
        console.log(child.payed);
        child.payed = !child.payed;
        console.log(child.payed);
      }
    });
    item.save((saveErr, saveItem) => {
      if (saveErr) res.send(saveErr);
      return res.status(200).send(saveItem);
    });
  });
});
mongoose中的
.save()
用于保存新文档。获取记录后,可以使用
findOneAndUpdate
更新记录。试着这样做:

router.post("/payed/:id", (req, res) => {
  Item.findOne({ _id: req.params.id }, (err, item) => {

    /* get children */
    let children = item.children;

    /* updating children's array */
    children.forEach((child) => {
      if (child.name === req.body.name) {
        child.payed = !child.payed;
      }
    });

    /* resaving the document */
    Item.findOneAndUpdate({ _id: req.params.id }, 
        {children: children }, 
        {new: true}, 
        (saveErr, updatedDoc) => { 
            if (saveErr) res.send(saveErr);
              return res.status(200).send(updatedDoc);
         });
  });
});

我不是MongoDB方面的专家,但您可能需要在修改子节点后保存它?您的代码保存的是父项而不是子项,我怀疑在保存父项时是否存在子项的隐式保存。