Mongoose 是 Node.js 中最流行的 MongoDB ODM(对象文档映射)库之一。它允许你以编程的方式定义模型以及相应的校验规则,使得你可以在应用中使用 MongoDB 数据库的内置功能,同时能够保证数据的一致性和完整性。
在本文中,我们将学习如何在 Mongoose 中创建预定义模式,以及如何使用模式定义模型。我们还将探讨模式中的各种数据类型、默认值和校验规则,并给出一些示例代码,以帮助你更好地理解概念。
创建预定义模式
在 Mongoose 中,预定义模式是用于创建模型的基本组件。预定义模式定义了模型中使用的各种属性、默认值和校验规则。每个模型都应该有一个与之关联的模式。
预定义模式可以直接定义在模型的构造函数中,也可以在模型的外部定义然后传递给模型构造函数。在本文中,我们将使用后者的方式来定义我们的预定义模式。
要定义预定义模式,你可以使用 Mongoose 中的 Schema 构造函数。Schema 构造函数接受一个对象作为参数,该对象列出了模型中的所有属性和其相关信息。下面是一个简单的预定义模式示例:
----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- ---- - ----- ------- -------- -- - ---
上面的代码中,我们创建了一个用户(User)模型的预定义模式。这个模式定义了三个属性:name
、email
和 age
。
name
和 email
属性都是必需的,这意味着在创建用户文档时必须提供这些属性。email
属性还设置了一个 unique
校验规则,强制要求在模型中每个文档的属性值唯一。
age
属性设置了一个默认值,这意味着如果在创建文档时不提供该属性,它将默认为 18。
在这个简单的示例中,我们定义了三种数据类型:字符串 String
、数字 Number
和布尔 Boolean
。Mongoose 还支持其他数据类型,包括日期、数组、嵌套对象等等。
使用预定义模式定义模型
当您定义了一个预定义模式之后,下一步是使用它来定义模型。为此,您可以使用 mongoose.model
方法,该方法接受两个参数:模型的名称和预定义模式的引用。
----- -------- - -------------------- -- ------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- ---- - ----- ------- -------- -- - --- -- ----------- ----- ---- - ---------------------- ------------
在上面的代码中,我们使用 mongoose.model
方法将刚刚创建的预定义模式与 User
模型关联起来,然后将该模型保存在变量 User
中。现在,我们可以使用 User
模型来进行 MongoDB 数据库中的文档操作。
模式中的数据类型
在 Mongoose 中,预定义模式允许您指定每个属性的数据类型。Mongoose 支持以下数据类型:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
- Decimal128
- Map
以下是一些示例:
----- -------- - -------------------- ----- ------ - --- ----------------- ----- ------- -- ----- ---- ------- -- ---- ---------- ----- -- ---- -------- ------- -- ----- --------- -------- -- ---- ------- ------ -- ---- ------- --------- -- -------- -- ----- ------ -- ---- -------- ----------- -- ---------- -- --------- --- -- --- -- ---
对于大多数的类型,你可以直接写类型名称。例如,上面的 name
属性直接指定为 String
类型,而不是 { type: String }
。
模式中的默认值
在 Mongoose 中,您可以使用 default
属性为模式的属性指定默认值。Mongoose 支持以下默认值类型:
- 静态默认值
- 动态默认值
- 构造函数默认值
以下是一些示例:
----- -------- - -------------------- ----- ------ - --- ----------------- ----- ------- ---- - ----- ------- -------- -- -- ----- -- ------ - ----- ------- -------- ---------- - ------ --------- - --------------- -- ----- - -- ----- - ----- ----- -------- -------- -- ------- - ---
在上面的代码中,age
属性使用静态默认值来设置默认值为 20。email
属性使用动态默认值,该默认值是一个函数,该函数使用该文档中的 name
数据来创建 email 地址。
date
属性使用了构造函数默认值,该默认值为当前日期和时间,由 Date.now
函数自动产生。
模式中的校验规则
在 Mongoose 中,您可以为模式的属性指定必需和其他类型的校验规则。下面是一些常见的校验规则:
required
: 属性必须提供值unique
: 属性必须唯一min
: 属性最小值max
: 属性最大值enum
: 属性必须是指定值之一match
: 属性必须通过正则表达式测试validate
: 自定义属性验证函数
以下是一些示例:
----- -------- - -------------------- ----- ------ - --- ----------------- ----- - ----- ------- --------- ---- -- ---- ------- -- ------ - ----- ------- ------- ---- -- ----- ------ -- ---- - ----- ------- ---- --- -- --- ------ -- ---- -- -- --- ------ -- -- ------- - ----- ------- ----- ---------- ------------ -- ------ ----- -------- - ---------- ---- --------- ---- -- --------- - ----- ------- ------ --------------------------------------- -- -------- ------------- -- -------- - ----- ------- --------- - ---------- ----------- - ------ ---------------------- -- ------- -------------- -- -------- ----- -- --------------- -- --- - ----- -- --- ------ - - ---
在上面的代码中,我们列出了一些常见的校验规则。请注意,有些规则需要提供额外的参数或配置,例如 min
和 max
规则需要指定属性的最小值和最大值。
validate
规则允许您编写自定义验证函数,该验证函数将被传递给属性的值,并返回 true
或 false
值,以指示该属性是否有效。此外,您还可以包含一条自定义错误消息,以指示出现错误的属性和原因。
示例代码
下面是一个简单的示例,演示如何使用 Mongoose 创建模式和模型:
----- -------- - -------------------- -------------------------------------------- - ---------------- ----- ------------------- ---- ---------- -- - ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- -------- -- -- ------ - ----- ------- ------- ----- --------- ---- - --- ----- ---- - ---------------------- ------------ -- ----- ----- ------- - --- ------ ----- ----- ----- ---- --- ------ ---------------------- --- -- -------- ------------------ ----- -- - -- ----- - ------------------- - ---- - ------------------ - --- -------------- -- --------------------
上述代码将创建一个名为 User
的模型,并使用预定义模式为其定义三个属性:name
、age
和 email
。然后,它使用该模型创建一个新用户,并将其保存到 MongoDB 数据库。
如果没有发生错误,它将输出新用户的详细信息。
总结
在本文中,我们介绍了如何在 Mongoose 中创建预定义模式、使用模式定义模型、指定数据类型、默认值和校验规则。我们还提供了一些示例代码,以帮助您更好地了解Mongoose模式的使用方法。现在,您已经掌握了 Mongoose 模型的创建和使用技巧,应该能够开始使用它来构建强大而灵活的 Node.js 应用程序了。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6643aa75d3423812e41a332d