在 Node.js 的后端开发中,Mongoose 是最常用的 MongoDB 数据库管理工具。Mongoose 中的 Schema 是其最核心的组件之一,它是用来定义 MongoDB 数据库集合中文档的格式,约束文档字段及其数据类型的。
Schema 的基本使用
我们可以通过以下代码来创建一个简单的用户信息的 Schema:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- ------- ------ ------- ---- ------- ---------- - ----- ----- -------- -------- -- ---------- - ----- ----- -------- -------- - ---
以上的代码定义了一个名为 userSchema
的 Schema,该 Schema 拥有四个属性:name
、email
、age
、以及两个系统自动维护的 createdAt
和 updatedAt
。类型也分别对应了字符串、数字和日期。
数据类型及验证
在 Mongoose 中,Schema 支持多种数据类型,如字符串、数字、日期、布尔值、数组、甚至嵌套对象等。我们可以通过以下代码来定义一个包含数组和嵌套对象的 Schema:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------ ------- -------- ------- ----- --------- ------- - ----- ------- ------ ------ -- ---------- - ----- ----- -------- -------- -- ---------- - ----- ----- -------- -------- - ---
为了保证存储的数据符合定义的数据类型,Schema 还提供了默认的数据验证机制。我们可以在定义 Schema 时添加验证规则,例如对于 email
字段:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- ------- ------ - ----- ------- --------- ----- ------- ----- ------ ------------------------------------- -- ---- ------- ---------- - ----- ----- -------- -------- -- ---------- - ----- ----- -------- -------- - ---
其中 required
选项表示该字段必须存在,unique
选项表示该字段唯一,match
选项表示该字段符合规则表达式。
Schema 方法与静态方法
Mongoose 中的 Schema 还可以定义自己的方法。例如,我们可以定义一个 isAdult
方法,用来判断一个人是否成年:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- ------- ------ ------- ---- ------- ---------- - ----- ----- -------- -------- -- ---------- - ----- ----- -------- -------- - --- -------------------------- - ---------- - ------ -------- -- --- --
然后我们就可以在使用该 Schema 的文档中调用 isAdult
方法了。
除了实例方法,Schema 还支持定义静态方法,这些方法可以在 Model 层中被调用。例如,定义一个静态方法 findByName
用来查询用户姓名:
userSchema.statics.findByName = function(name) { return this.find({ name }); };
该方法可以在使用该 Schema 的 Model 层中被调用,例如:
const UserModel = mongoose.model('User', userSchema); UserModel.findByName('Tom').then(users => console.log(users));
总结
在 Node.js 后端开发中,Mongoose 中的 Schema 是使用MongoDB数据库时非常重要的组件,它能够帮助我们定义MongoDB的文档类型、字段规则以及验证方法等,使得数据库的操作和使用更加可控、简洁。在了解了 Schema 的基本使用、数据类型及验证、自定义方法和静态方法等这些核心内容之后,我们就可以更加灵活的使用 Mongoose 操作 MongoDB 了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b0bf5e48841e9894cd8f3c