[英]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 })
})
});
希望这能回答你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.