Mongoose 中内置的 id 与 _id 的区别及使用方法

阅读时长 3 分钟读完

在使用 Mongoose 进行开发时,我们通常需要使用 Mongoose 中提供的 id 和 _id 来管理数据库中的文档。那么,这两者之间有什么区别呢?在什么情况下应该使用它们?本文将深入探讨它们之间的区别及使用方法。

id 和 _id 的区别

首先,让我们来看一下这两者的定义及区别。

在 Mongoose 中,我们会经常用到以下两种 id:

  • id:这是一种虚拟的属性,用于表示文档的唯一标识符。它是一个字符串或数字类型的值,可以进行序列化和反序列化操作,并且具有合适的更改监听。当你需要在 Mongoose 中使用 id 时,你可以使用 document.iddocument._id.toString() 来获取这个值。

  • _id:这是 MongoDB 中文档默认使用的标识符。它由 12 个字节组成,其类型为 ObjectId。由于其在 MongoDB 中使用频率极高,Mongoose 也默认使用它作为文档的唯一标识符。当你需要在 Mongoose 中使用 _id 时,你可以使用 document._iddocument._id.toString() 来获取这个值。

因此,id 和 _id 的最大区别在于它们的属性类型不同。

如何使用它们

在使用 Mongoose 进行开发时,我们通常会使用 findByIdfindByIdAndUpdate 等方法来获取或更新文档。但是,在这里你需要注意如下几点:

  • 当你使用 findByIdfindByIdAndUpdate 方法时,你必须传递一个字符串类型的值来查询文档。

  • 如果你传递了一个对象类型的值,则 Mongoose 会认为你想要查询 id 字段,而不是 _id 字段。因此,你可以通过将 _id 转换为字符串来查询它。

在下面的示例中,我们将使用 Mongoose 来创建一个简单的 user 模型,然后通过 findByIdAndUpdate 方法来更新这个模型的 _id 字段。

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

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

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

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

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

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

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

总结

在本文中,我们对 Mongoose 中内置的 id 和 _id 进行了深入探讨。我们了解了它们之间的区别,以及如何正确地在 Mongoose 中使用它们。

当你需要在 Mongoose 中管理文档时,请务必注意使用适当的 id 标识符,并遵循上述步骤来避免可能的错误发生。

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

纠错
反馈