Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 参数{new:true}不显示实际更新值的Mongoose updateOne_Node.js_Mongoose - Fatal编程技术网

Node.js 参数{new:true}不显示实际更新值的Mongoose updateOne

Node.js 参数{new:true}不显示实际更新值的Mongoose updateOne,node.js,mongoose,Node.js,Mongoose,我花了几个小时努力显示更新文档的最终价值(通过mongooseupdateOne)。当我在Postman上调用端点时,我成功地修改了它,因为我可以看到“nModified:1”,但我无法输出实际的最终文档-即使使用参数{new:true} 这是路线的代码: // 3. We check if blockid is in this project Block.findById(req.params.blockid) .then(block => {

我花了几个小时努力显示更新文档的最终价值(通过mongooseupdateOne)。当我在Postman上调用端点时,我成功地修改了它,因为我可以看到“nModified:1”,但我无法输出实际的最终文档-即使使用参数{new:true}

这是路线的代码:

// 3. We check if blockid is in this project
        Block.findById(req.params.blockid)
          .then(block => {
            if (!block) {
              errors.noblock = "Block not found";
              return res.status(404).json(errors);
            }

            // 4. We found the block, so we modify it
            Block.updateOne(
              { _id: req.params.blockid },
              { $set: blockFields },   // data to be updated
              { new: true },           // flag to show the new updated document
              (err, block) => {
                if (err) {
                  errors.noblock = "Block not found";
                  return res.status(404).json(errors);
                }
                console.log(block);
                res.json(block);
              }
            );
          })
          .catch(err => console.error(err));
相反,这是我得到的输出(Mongoose处于调试模式)

有什么想法吗


非常感谢

您应该将第二个参数作为键的对象和数据的值, 不要作为$Set:blockfields传递,只需像下面那样添加,如果它是包含参数的对象

{$set:blockFields} 因为代码应该是这样的


有关更多详细信息,请参见更新的链接。一个函数详细信息

{new:true}
将返回修改过的文档,而不是原始文档
updateOne
没有此选项。如果需要以更新文档的形式响应,请使用
findOneAndUpdate

下面是可以使用
{new:true}

  • findByIdAndUpdate()
  • findOneAndUpdate()
  • findOneAndDelete()
  • findOneAndRemove()
  • findOneAndReplace()

    • 谢谢@sivasankar的回答。以下是使用findOneAndUpdate

      以下是预期结果:


      块字段是要更新的参数。{new:true}是输出mongoose结果的标志,但它不显示新结果。我将编辑描述。好的,如果“块域”本身是一个包含参数的对象,那么不要在编写时写入它。我正在更新我的解决方案。请检查它。
      Block.updateOne(
        { _id: req.params.blockid },
        blockFields, // if blockfields is object containing parameters
        { new: true },
        (err, block) => {
          // lines of code
        }
      );