Mongoose 中使用 findByIdAndUpdate 的注意事项

阅读时长 4 分钟读完

Mongoose 中使用 findByIdAndUpdate 的注意事项

Mongoose 是一个优秀的 Node.js ODM(对象文档映射器),它可以极大地简化与 MongoDB 的交互。Mongoose 提供了许多功能强大的 API,让我们能够更加便捷地操作 MongoDB 数据库。

在使用 Mongoose 进行 CRUD 操作时,findByIdAndUpdate 是一种非常常见的方法。这个方法可以根据 ID 查找到指定文档并更新其内容。然而,在使用这个方法的过程中,我们需要注意一些细节,本文就来介绍一下。

1. findByIdAndUpdate 的基本用法

findByIdAndUpdate 方法可以接收三个参数:文档 ID,要更新的内容和一个回调函数。其中,回调函数的第一个参数是错误对象,第二个参数是更新后的文档对象。

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

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

2. 使用 findByIdAndUpdate 的注意事项

虽然 findByIdAndUpdate 很方便,但在实际使用中,需要注意以下几点:

2.1 默认情况下,返回的是更新前的文档

默认情况下,findByIdAndUpdate 方法返回的是更新前的文档。如果我们想要得到更新后的文档,需要设置一个选项参数 { new: true }。如下代码:

2.2 需要在 Schema 中设置 useFindAndModify 为 false

在 Mongoose 5.x 以前的版本中(包括 4.x 和 3.x),Mongoose 默认使用 MongoDB 的 findAndModify 方法来实现 findByIdAndUpdate,而在 MongoDB 4.2 中,findAndModify 已经被废弃,因此 Mongoose 5.x 中默认使用 MongoDB 的 findOneAndUpdate 方法来实现 findByIdAndUpdate。

两种方法之间的差异在于 findOneAndUpdate 默认情况下不会返回更新后的文档,需要将选项参数 { new: true } 传入才能返回。因此,如果我们使用了 Mongoose 5.x,就需要在 Schema 中将 useFindAndModify 设置为 false,以便让 Mongoose 使用 findOneAndUpdate 方法。

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

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

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

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

2.3 执行 updateOne 和 updateMany 方法

在 Mongoose 5.x 中,findByIdAndUpdate 方法默认情况下是执行 updateOne 方法。也就是说,如果数据库中存在多个 ID 相同的文档,只有第一个符合条件的文档会被更新。

如果要更新多个文档,需要使用 updateMany 方法。

3. 总结

findByIdAndUpdate 方法是在 Mongoose 中实现更新文档的一个很有用的方法。虽然用起来非常简单,但需要注意一些细节,以免造成不必要的错误。在实际使用中,我们需要设置选项参数 { new: true } 和 useFindAndModify 为 false,细心地检查操作的返回值,以便更加高效地操作 MongoDB 数据库。

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

纠错
反馈