解决 Mongoose 中 findOneAndRemove 方法无法返回被删除文档的问题

阅读时长 4 分钟读完

如果你正在使用 Mongoose 操作 MongoDB,可能会遇到使用 findOneAndRemove 方法时,无法返回被删除文档的情况。本文将介绍这一问题的原因,并提供解决方案和示例代码。

问题描述

在调用 Mongoose Model 的 findOneAndRemove 方法时,可以通过查询条件找到并删除 MongoDB 中的一条文档。该方法会返回被删除的文档,但是如果你将返回值打印输出,会发现返回的是 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

纠错
反馈