[英]How to run callback after mongoose findOneAndUpdate finish updating?
在我的 API 中,我有 express 的app.put
方法,我使用 mongoose 的findOneAndUpdate
方法在集合中搜索具有特定标题的文档并更新它。
app.put("/articles/:articleTitle",(req, res) => {
Article.findOneAndUpdate({
title: req.params.articleTitle
}, {
title: req.body.title,
content: req.body.content
}, (err, foundArticle) => {
err ? res.send("Error !") : foundArticle ? res.send("Article found.Updating...") : res.send("NO articles found to update!")
})
})
如何在更新完成后运行回调 function,并返回更新后的文档? 我试图在findOneAndUpdate
方法的末尾添加一个.then
但它抛出了这个错误: “MongooseError:查询已执行:Article.findOneAndUpdate ...”
我还尝试在变量中传递方法的返回值并在.then
中访问它,但它会引发相同的错误,如下所示:
app.put("/articles/:articleTitle",(req, res) => {
const doc = Article.findOneAndUpdate({
title: req.params.articleTitle
}, {
title: req.body.title,
content: req.body.content
},{returnDocument: 'after'}, (err, foundArticle) => {
err ? res.send("Error !") : foundArticle ? res.send("Article found.Updating...") : res.send("NO articles found to update!")
}).then( () =>{ console.log(doc) })
})
编辑:似乎当我简单地添加选项returnDocument: 'after'
作为参数时,它让我可以访问它自己的方法回调中的“after”文档,嗯,我必须检查文档,但如果有人知道共同点练习这样做,我将不胜感激!
Article.findOneAndUpdate({
title: req.params.articleTitle
}, {
title: req.body.title,
content: req.body.content
},{returnDocument: 'after'}, (err, foundArticle) => {
err ? res.send("Error !") : foundArticle ? res.send(foundArticle) : res.send("NO articles found to update!")
})
根据文档, findOneAndUpdate()
:
[...] 找到与给定过滤器匹配的第一个文档,应用更新并返回该文档。 默认情况下,findOneAndUpdate()返回应用更新之前的文档。
要实际返回更新的文档,文档建议执行以下操作:
您应该将新选项设置为 true 以在应用更新后返回文档。
该方法的第三个参数是一个可选options
object ,其中可以将new
参数设置为true
以实际返回更新的文档。
要在方法调用后实际访问更新的文档,有多种方法可以这样做。
示例 1:使用 async/await 语法
const doc = await Article.findOneAndUpdate(
{ title: req.params.articleTitle },
{
title: req.body.title,
content: req.body.content
},
{ new: true }
)
doc.title // equals value of req.body.title
示例 2:使用.then()
语法
Article.findOneAndUpdate(
{ title: req.params.articleTitle },
{
title: req.body.title,
content: req.body.content
},
{ new: true }
).then((err, doc) => {
console.log(doc.title) // equals value of req.body.title
})
示例 3:使用回调语法
Article.findOneAndUpdate(
{ title: req.params.articleTitle },
{
title: req.body.title,
content: req.body.content
},
{ new: true },
(err, doc) => {
console.log(doc.title) // equals value of req.body.title
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.