Node.js 参数{new:true}不显示实际更新值的Mongoose updateOne
我花了几个小时努力显示更新文档的最终价值(通过mongooseupdateOne)。当我在Postman上调用端点时,我成功地修改了它,因为我可以看到“nModified:1”,但我无法输出实际的最终文档-即使使用参数{new:true} 这是路线的代码: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 => {
// 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
}
);