Mongoose 是 Node.js 中操作 MongoDB 数据库的主要库之一,它提供了方便的数据模型定义和操作。其中,Schema 类型和验证功能是 Mongoose 的核心特性之一。在本文中,我们将深入探讨 Mongoose 中的 Schema 类型和验证功能,并带有详细的示例代码,旨在帮助读者更好地理解和使用 Mongoose。
Schema 类型
在 Mongoose 中,Schema 类是用来定义数据模型的一个构造函数。在创建 Schema 时,我们需要使用不同的数据类型定义模型的字段属性。Mongoose 支持的数据类型包括:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
下面是一个简单的模型定义示例:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- --------- ------- ---- ------- ------ ------- ---- ------- --- ----- ---- - ---------------------- ------------
上面的代码定义了一个 User 模型,它有四个属性:username、age、email、bio。在定义每个属性时,我们使用了不同的 Schema 类型,例如 String 和 Number。当我们实例化该模型时,Mongoose 会创建一个名为 users 的集合,并按照该模型的结构定义其中的文档。
验证
在定义 Mongoose 模型时,我们可以使用验证器来确保数据的一致性和完整性。Mongoose 支持的验证器包括:
- required
- enum
- match
- min/max
- minlength/maxlength
- validate
required
required 验证器用来确保文档中的字段不为空值或不存在。下面是一个示例:
const userSchema = new mongoose.Schema({ username: { type: String, required: true }, }); const User = mongoose.model('User', userSchema);
在上面的示例中,我们定义了一个 username 属性,并设置了 required 验证器。这意味着当我们使用模型创建一个文档时,该文档的 username 属性必须为非空值,否则将会引发验证错误。
enum
enum 验证器用来确保文档中的字段值必须在指定的枚举列表中。下面是一个示例:
const userSchema = new mongoose.Schema({ role: { type: String, enum: ['admin', 'member'] } }); const User = mongoose.model('User', userSchema);
在上面的示例中,我们定义了一个 role 属性,并设置了 enum 验证器。这意味着当我们使用模型创建一个文档时,该文档的 role 属性必须为 'admin' 或 'member' 中的一个值,否则将会引发验证错误。
match
match 验证器用来确保文档中的字段值符合指定的正则表达式。下面是一个示例:
const userSchema = new mongoose.Schema({ email: { type: String, match: /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/ } }); const User = mongoose.model('User', userSchema);
在上面的示例中,我们定义了一个 email 属性,并设置了 match 验证器。这意味着当我们使用模型创建一个文档时,该文档的 email 属性必须符合指定的正则表达式,否则将会引发验证错误。
min/max
min/max 验证器用来确保文档中的数字字段值不小于或不大于指定的最小或最大值。下面是一个示例:
const userSchema = new mongoose.Schema({ age: { type: Number, min: 18, max: 100 } }); const User = mongoose.model('User', userSchema);
在上面的示例中,我们定义了一个 age 属性,并设置了 min/max 验证器。这意味着当我们使用模型创建一个文档时,该文档的 age 属性必须大于等于 18,小于等于 100,否则将会引发验证错误。
minlength/maxlength
minlength/maxlength 验证器用来确保文档中的字符串字段值的长度不小于或不大于指定的最小或最大值。下面是一个示例:
const userSchema = new mongoose.Schema({ bio: { type: String, minlength: 10, maxlength: 200 } }); const User = mongoose.model('User', userSchema);
在上面的示例中,我们定义了一个 bio 属性,并设置了 minlength/maxlength 验证器。这意味着当我们使用模型创建一个文档时,该文档的 bio 属性的长度必须在 10 到 200 之间,否则将会引发验证错误。
validate
validate 验证器用来自定义验证函数来验证文档中的字段值。下面是一个示例:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ---- - ----- ------- --------- ------- -- - ------ ----- - - -- ----- - ---- -- ------- - - --- ----- ---- - ---------------------- ------------
在上面的示例中,我们定义了一个 age 属性,并设置了 validate 验证器。这意味着当我们使用模型创建一个文档时,该文档的 age 属性将使用自定义验证函数进行验证。
总结
在本文中,我们介绍了 Mongoose 中的 Schema 类型和验证功能。我们讨论了不同的 Schema 类型和验证器,并提供了针对每个验证器的示例代码。我们希望本文能够帮助读者更好地理解和使用 Mongoose,从而构建可靠的应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6475cce2968c7c53b02ce23d