繁体   English   中英

Mongoose保存方法保存多次相同的文件

[英]Mongoose save method saves multiple times same document

嗨我在角度UI上有一个输入字段日期选择器。 我从字段中选择日期并更新开始日期,直到它正常工作。 但如果我再次选择日期,它会复制文档而不是更新它。

工作代码:

router.post('/request/waiting/:startingDate', (req, res) => {
  const waiting = new WaitingRequest({
    startingDate: req.params.startingDate,
    requestID: req.body.requestID,
    contactInformation: req.body.contactInformation,
    orderInformation: req.body.orderInformation,
    requestInformation: req.body.requestInformation,
    installations: req.body.installations
  });
  waiting.save().then(result => {
    return res.status(201).json({
      message: 'Updated and Saved /waiting',
      result: result
    });
  });
});

到目前为止我尝试过但它返回null:

router.post('/request/waiting/:startingDate', (req, res) => {
  WaitingRequest.findOneAndUpdate({
    requestID: req.body.requestID
  }, {
    startingDate: req.params.startingDate
  }).then(result => {
    console.log(result)
    if (result) {
      return res.status(201).json({
        message: 'Updated and saved',
        result: result
      });
    } else {
      return res.status(404).json({
        message: "404 Request Not Found"
      })
    }
  })
});

使用UpdateOne()方法更新数据,

router.post('/request/waiting/:startingDate', (req, res) => {
    let query = { requestID: req.body.requestID }
    let update = { $set: { startingDate: new Date(req.params.startingDate) } }
    WaitingRequest.updateOne(query, update,(error,result)=>{
        if(error) return res.status(404).json({ message: "404 Request Not Found" })
        return res.status(201).json({
            message: 'Updated and saved',
            result: result
        });
    })
});

您必须在findOneAndUpdate中使用$ set子句

编辑:改进代码以使用承诺并发送Date对象作为开始日期

尝试这个:

router.post('/request/waiting/:startingDate', (req, res) => {


WaitingRequest.findOneAndUpdate({
    requestID: req.body.requestID
  }, { $set: {
    startingDate: new Date(req.params.startingDate)
    }
  }).then(result => {
      return res.status(201).json({
        message: 'Updated and saved',
        result: result
      })
  }).catch(error => {
      res.send({ error })
   })
});

获取404错误的原因是findOneAndUpdate无法根据requestID找到所需的文档。 这个谜题唯一缺失的部分是

new :bool - 如果为true,则返回修改后的文档而不是原始文档。 默认为false(在4.0中更改)

router.post('/request/waiting/:startingDate', (req, res) => {

  WaitingRequest.findOneAndUpdate({
    requestID: req.body.requestID
    }, { $set: {
       startingDate: new Date(req.params.startingDate)
    }, {
       upsert:true, new: true,
    },
  }).then(result => {
       return res.status(201).json({
        message: 'Updated and saved',
        result: result
      })
  }).catch(error => {
       res.send({ error })
   })
});

参考:mongoose docs

希望这能回答你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM