如果你正在使用 Mongoose 操作 MongoDB,可能会遇到使用 findOneAndRemove 方法时,无法返回被删除文档的情况。本文将介绍这一问题的原因,并提供解决方案和示例代码。
问题描述
在调用 Mongoose Model 的 findOneAndRemove 方法时,可以通过查询条件找到并删除 MongoDB 中的一条文档。该方法会返回被删除的文档,但是如果你将返回值打印输出,会发现返回的是 null:
const MyModel = require('./myModel'); MyModel.findOneAndRemove({_id: '5f35c863515d601500b47a74'}, (err, doc) => { console.log(doc); // null });
这是因为 findOneAndRemove 方法的返回值不是被删除的文档,而是被删除文档所属的 Model 实例。
解决方案
要解决这一问题,可以使用 promise 风格的 Model.findOneAndRemove 方法,该方法返回一个 promise,可以在 then 方法中获取被删除的文档。示例代码如下:
-- -------------------- ---- ------- ----- ------- - --------------------- ------------------------------ ----------------------------------- ----------- -- - ----------------- -- ------ -- ------------ -- - ----------------- ---
如果你的 Node.js 版本不能支持 promise,也可以使用回调函数的方式获取被删除的文档,示例代码如下:
-- -------------------- ---- ------- ----- ------- - --------------------- ------------------------------ ---------------------------- ----- ---- -- - -- ----- - ----------------- - ---- - ----------------- -- ------ - ---
正确使用 findOneAndRemove 方法
除了解决上述问题,还要注意使用 findOneAndRemove 方法的正确姿势。
检查文档是否存在
在调用 findOneAndRemove 方法前,应该先检查要删除的文档是否存在。如果文档不存在,该方法返回值为 null,将无法判断删除操作是否成功。示例代码如下:
-- -------------------- ---- ------- ----- ------- - --------------------- --------------------- ---------------------------- ----- ---- -- - -- ----- - ------------------------------ ----------------------------------- ----------- -- - ----------------- -- ------ -- ------------ -- - ----------------- --- - ---- - ---------------------- - ---
使用 async/await 简化操作
如果你的 Node.js 版本支持 async/await,可以使用该特性简化操作,示例代码如下:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- -------- ----------- - --- --- - ----- --------------------- ----------------------------- -- ----- - --- - ----- ------------------------------ ------------------------------------ ----------------- - ---- - ---------------------- - - ------------
结论
本文介绍了 Mongoose 中使用 findOneAndRemove 方法删除文档时,无法返回被删除的文档的问题,提供了解决方案和示例代码,并介绍了正确使用该方法的方法。如果你使用 Mongoose 操作 MongoDB,希望本文能帮助你解决遇到的困惑。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6703b65fd91dce0dc84c5028