Mongoose 中的多表关联及其实现方式详解

阅读时长 5 分钟读完

在使用 Node.js 进行 Web 开发时,Mongoose 是一个非常流行的 MongoDB ODM 库。它提供了很多方便的操作 MongoDB 数据库的 API,同时也支持多表关联。多表关联是 Web 开发中非常常见的一种需求,本文将详细介绍 Mongoose 中的多表关联及其实现方式。

一、多表关联的基本概念

在 MongoDB 中,多表关联的实现方式有两种:嵌套文档和引用文档。嵌套文档是将一个文档对象嵌套到另一个文档对象中,而引用文档是将一个文档对象的 ID 引用到另一个文档对象中。

二、Mongoose 中多表关联的实现方式

1. 嵌套文档

嵌套文档是将一个文档对象嵌套到另一个文档对象中。在 Mongoose 中,可以通过定义 Schema 的方式来实现嵌套文档。

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

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

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

上面的代码定义了两个 Schema,一个是 CommentSchema,表示评论的数据结构,另一个是 ArticleSchema,表示文章的数据结构。ArticleSchema 中的 comments 字段是一个数组,里面包含了多个 CommentSchema 对象,这就实现了嵌套文档的关联。

2. 引用文档

引用文档是将一个文档对象的 ID 引用到另一个文档对象中。在 Mongoose 中,可以通过定义 Schema 的方式来实现引用文档。

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

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

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

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

上面的代码定义了三个 Schema,一个是 CommentSchema,表示评论的数据结构,其中 author 字段是一个 ObjectId 类型,它引用了 User 集合中的一个文档;另一个是 UserSchema,表示用户的数据结构;最后一个是 ArticleSchema,表示文章的数据结构,其中 comments 字段是一个数组,里面包含了多个 Comment 的 ObjectId,这就实现了引用文档的关联。

三、实现多表关联的操作

1. 嵌套文档

对于嵌套文档关联的操作,可以直接在父文档对象中操作子文档对象。

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

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

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

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

上面的代码创建了一个 Article 对象,并向其中添加了一个 Comment 对象。调用 save 方法后,就可以将整个文档对象保存到 MongoDB 数据库中。

2. 引用文档

对于引用文档关联的操作,需要先在子文档对象中保存父文档对象的 ID,然后再通过 ID 引用父文档对象。

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

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

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

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

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

上面的代码创建了一个 User 对象和一个 Comment 对象,其中 Comment 对象的 author 字段保存了 User 对象的 ID。在查询 Article 对象时,使用 populate 方法将 comments 数组中的 author 字段引用的 User 对象填充到查询结果中,这样就可以通过 article.comments[0].author.name 获取评论作者的姓名了。

四、总结

本文介绍了 Mongoose 中的多表关联及其实现方式,通过示例代码详细讲解了嵌套文档和引用文档的实现方式,并给出了操作示例。希望本文对大家了解 Mongoose 中的多表关联有所帮助。

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

纠错
反馈