首页 > 解决方案 > 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);

      }
    });
  });

在此处输入图像描述

标签: mongodbmongoosepostman

解决方案


你只是有一个语法错误。您需要使用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);

                }
            });
    });

推荐阅读