mongodb - Mongoose findOneAndUpdate 用于更新文档中的多个字段
问题描述
我正在使用 mongoose 版本 5.9.25,我正在使用邮递员进行 API 测试。
我尝试构建 RESTful API,但同时使用 route.put() 以及findOneAndUpdate
方法并使用标题字段查找文档。
我的文档包含两个字段 - 标题和内容,我想同时更新这两个字段。它只更新我的文档的标题,而内容字段甚至没有添加到对象中。
我尝试过findOneAndUpdate
直接通过 mongo 控制台使用本机 MongoBD 驱动程序方法,它工作得非常好。
我想使用 mongoose 更新具有新标题和内容的对象,并且以下代码未提供所需的输出在放置请求之前 - 请注意两个图像中的对象 id 相同,但在 PUT 请求后仅更新标题字段,如图所示图 2。
这是我的更新路线:
app.route("/articles/:articleTitle")
.put(function(req,res){
Article.findOneAndUpdate(
{title:req.params.articleTitle},
{title: req.body.title ,content: req.body.content},
{overwrite: true},
function(err,result){
if(!err){
res.send(result);
}
else{
res.send(err);
}
});
});
解决方案
你只是有一个语法错误。您需要使用set运算符,将代码的更新部分从:
{title: req.body.title ,content: req.body.content}
对此:
{$set: {title: req.body.title ,content: req.body.content}},
此外,您应该使用该new
选项,而不是overwrite
我认为仅适用于update
操作员但不适用于findOneAnd..
操作员的选项。
满的:
app.route("/articles/:articleTitle")
.put(function(req,res){
Article.findOneAndUpdate(
{title:req.params.articleTitle},
{$set: {title: req.body.title ,content: req.body.content}},
{new: true},
function(err,result){
if(!err){
res.send(result);
}
else{
res.send(err);
}
});
});