具有参数{new:true}的猫鼬updateOne不显示实际更新值

时间:2019-02-20 11:05:10

标签: node.js mongoose

我正在努力几个小时来显示更新文档的最终价值(通过猫鼬 updateOne )。我成功修改了它,因为当我在Postman上调用终结点时看到“ nModified:1”,但是我无法输出实际的最终文档-即使使用参数 {new:true} < / em>

这是路线的代码:

// 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 output

有什么想法吗?

非常感谢

3 个答案:

答案 0 :(得分:2)

{ new : true }将返回修改后的文档,而不是原始文档。 updateOne没有此选项。如果您需要回复作为更新的文档,请使用findOneAndUpdate

下面是mongoosejs函数,您可以在其中使用{ new : true }

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

答案 1 :(得分:0)

您应该给第二个参数作为数据的键值巴黎的对象, 不要作为$ Set传递:blockfields,如果它是包含参数的对象,则只需添加如下内容

  

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

Block.updateOne(
  { _id: req.params.blockid },
  blockFields, // if blockfields is object containing parameters
  { new: true },
  (err, block) => {
    // lines of code
  }
);

有关更多详细信息,请参见updateOne函数详细信息updateOne

答案 2 :(得分:0)

谢谢@sivasankar的回答。这是 findOneAndUpdate

的更新的工作版本。

mongoose new function findoneandupdate

这是预期的结果:

terminal result outputting the document