Express不会将更新的行保存到数据库

问题描述

我在Express和NodeJS中有一个函数,可以在其中切换Item的布尔值。因此,当调用函数时,布尔值将交换为其他值。我做了一个console.log布尔值。我的MongoDB中的对象未更新。我有一个与MongoDB之间相同的对象的Post,Get和GetAll请求,它们都起作用。因此,与数据库的连接没有问题。

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);
    });
  });
});

解决方法

猫鼬中的

.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);
         });
  });
});