Mongoose 中使用 findAndUpdate() 更新数据的正确姿势

阅读时长 5 分钟读完

在前端开发中,使用 Mongoose 驱动 MongoDB 的数据存储是一个常见的做法。而对于修改已经存在的数据,我们通常会使用 Mongoose 中提供的 findAndUpdate() 方法。然而,该方法在使用过程中可能会出现一些问题,因此本文将介绍 Mongoose 中使用 findAndUpdate() 更新数据的正确姿势。

findAndUpdate() 的基本使用

Mongoose 中的 findAndUpdate() 方法通常用于更新已经存在的数据,它的用法非常简单:

以上代码中,我们通过指定查询条件 query 以及需要更新的字段 update,并使用 options 参数告诉 Mongoose 返回更新后的文档。使用回调函数可以获取方法执行的错误信息以及更新后的数据。

注意 Mongoose 中的更新操作存在坑点

然而,要想顺利地使用 findAndUpdate() 进行数据更新,并不是一件容易的事情。事实上,你需要在使用前先了解一些 Mongoose 中的坑点,否则可能导致更新失败或者更新不是预期的数据。

使用 new 选项返回更新后的文档

在上一小节的基本使用中,我们使用了 options 参数并指定了 new: true,这是十分必要的。因为默认情况下,findAndUpdate() 返回的是更新前的文档,如果不指定 new: true,那么你将无法获得更新后的文档数据。

不要忘记使用 set$set 命令

在更新字段时,我们通常会使用 set$set 命令来设置新值。因为如果不使用这些命令,Mongoose 将无法正常工作。

比如,下面的代码是错误的:

它不会更新 test 的名称,而是创建一个新的文档,并将其名称设置为 new-test

正确的写法是:

不要忘记使用 exec()

Mongoose 中的查询方法都没有真正执行,直到使用 exec() 方法调用之后才会执行查询。因此,在使用 findAndUpdate() 方法前,我们需要确保使用了 exec(),否则更新操作将无法执行。

下面的代码是错误的:

正确的写法是:

示例代码

下面是一个完整的示例代码:

-- -------------------- ---- -------
----- -------- - --------------------
-- ---------------------
--------------------------------------------- - ---------------- ---- ---

-- ---- ------
----- ------ - ----------------
----- ---------- - --- --------
  ----- -------
  ---- -------
---

-- ---- -----
----- --------- - --------------------------- ------------

-- ------
----- ---- - --- ----------- ----- ------- ---- -- ---
--------------- ---- -- -
  -- ----- ----- ----
  --------------------- -----

  -- ----
  ---------------------------- ----- ------ -- - ----- - ---- -- - -- - ---- ---- ------------- ---- -- -
    -- ----- --------------------- -----
    ----------------------- -----

    -- ----
    --------------------- ---- ------- -- ----- -- -
      -- ----- ----- ----
      ------------------------
      -- -------
      ----------------------------
    ---
  ---
---

在使用 findAndUpdate() 方法时,我们建议尽可能地使用回调函数来获取错误信息以及更新后的数据,这可以帮助排除代码中的问题并规避更多的坑点。

结论

本文详细介绍了 Mongoose 中使用 findAndUpdate() 更新数据的正确姿势,并结合了示例代码来说明如何正确使用该方法。通过本文的学习,相信大家能够更加熟练地使用 findAndUpdate() 进行数据更新。同时,我们也要注意在使用 Mongoose 进行开发时,需要对其进行深入学习并积极探索。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6774823f6d66e0f9aaedbff3

纠错
反馈