Mongoose 中如何设置 MongoDB 集合名和多个文档模型之间的关系

阅读时长 9 分钟读完

Mongoose 是 Node.js 环境下 MongoDB 的一个对象模型工具,它提供了简单、直观的 API,可以方便地进行数据库操作。在使用 Mongoose 进行开发时,有时需要对 MongoDB 集合名进行自定义,或者在多个文档模型之间建立关系。本文将详细介绍如何在 Mongoose 中实现这些功能,并提供示例代码。

设置 MongoDB 集合名

默认情况下,Mongoose 会根据模型名自动创建一个与之对应的集合,并将其命名为模型名的小写复数形式。例如,如果有一个名为 User 的模型,它对应的集合名就是 users。如果需要对集合名进行自定义,可以在定义模型时传入第二个参数,指定集合名。例如:

上面的代码中,我们将集合名设置为 myusers,而不是默认的 users

建立文档模型之间的关系

在 Mongoose 中,有三种文档模型之间的关系:一对一、一对多和多对多。这些关系可以通过在模型中定义字段来实现。

一对一关系

一对一关系指的是两个文档模型之间的关系是唯一的。例如,一个用户只能有一个身份证号码,一个身份证号码也只能对应一个用户。在 Mongoose 中,可以使用 populate 方法来实现一对一关系。例如:

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

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

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

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

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

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

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

上面的代码中,我们定义了两个模型:UserIdCard。其中,User 模型中有一个 idCard 字段,类型为 mongoose.Schema.Types.ObjectId,表示该用户对应的身份证号码的 _idIdCard 模型中有一个 user 字段,类型为 mongoose.Schema.Types.ObjectId,表示该身份证号码对应的用户的 _id。我们在创建用户和身份证号码时,将身份证号码的 user 字段关联到用户的 _id,并将身份证号码的 _id 赋值给用户的 idCard 字段。在查询用户时,使用 populate 方法将 idCard 字段关联到身份证号码模型上,从而实现了一对一关系。

一对多关系

一对多关系指的是一个文档模型对应多个另一个文档模型。例如,一个用户可以有多个订单,一个订单只能对应一个用户。在 Mongoose 中,可以使用 populate 方法和 virtual 字段来实现一对多关系。例如:

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

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

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

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

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

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

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

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

上面的代码中,我们定义了两个模型:UserOrder。其中,Order 模型中有一个 user 字段,类型为 mongoose.Schema.Types.ObjectId,表示该订单对应的用户的 _id。我们在创建用户和订单时,将订单的 user 字段关联到用户的 _id。在查询用户时,使用 populate 方法将 orders 字段关联到订单模型上,从而实现了一对多关系。在查询订单时,使用 virtual 字段将 user 字段关联到用户模型上,从而实现了多对一关系。

多对多关系

多对多关系指的是两个文档模型之间的关系是多对多的。例如,一个学生可以选修多个课程,一个课程也可以被多个学生选修。在 Mongoose 中,可以使用 ref 字段和 populate 方法来实现多对多关系。例如:

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

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

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

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

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

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

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

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

上面的代码中,我们定义了两个模型:StudentCourse。其中,Student 模型中有一个 courses 字段,类型为数组,表示该学生选修的课程的 _idCourse 模型中有一个 students 字段,类型为数组,表示该课程被哪些学生选修的 _id。我们在创建学生和课程时,将学生的 courses 字段关联到课程的 _id,将课程的 students 字段关联到学生的 _id。在查询学生和课程时,使用 populate 方法将 courses 字段关联到课程模型上,从而实现了多对多关系。在查询课程和学生时,使用 populate 方法将 students 字段关联到学生模型上,从而实现了多对多关系。

总结

本文介绍了在 Mongoose 中如何设置 MongoDB 集合名和多个文档模型之间的关系。其中,设置集合名可以在定义模型时传入第二个参数,指定集合名。建立文档模型之间的关系有三种:一对一、一对多和多对多。这些关系可以通过在模型中定义字段来实现。一对一关系可以使用 populate 方法来实现,一对多关系可以使用 populate 方法和 virtual 字段来实现,多对多关系可以使用 ref 字段和 populate 方法来实现。这些功能对于开发复杂的应用程序非常有用,可以帮助开发者更方便地进行数据库操作。

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

纠错
反馈