Mongoose 中文文档 schema 实例详解
在 MongoDB 中,数据存储的格式是以文档形式存储的,每个文档包含一些字段和对应的值。而在使用 Mongoose 操作 MongoDB 数据库时,我们则需要定义每个文档的格式,也就是 schema。
Schema 是一个 Mongoose 中非常重要的概念,它用于定义数据集合中每个文档的属性、类型以及各种约束条件。在本文中,我们将详细介绍 Mongoose schema 的相关知识,并结合实例来进行讲解。
- 基本用法
定义一个 Mongoose schema 通常需要包含键(key)和值(value)两部分。其中,键表示文档属性名称,值是一个对象,用于描述相应属性的类型、默认值、验证规则等。
下面是一个简单的 schema 定义示例:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, age: Number, email: String, createTime: { type: Date, default: Date.now } }); module.exports = mongoose.model('User', userSchema);
在这个示例代码中,定义了一个名为 User 的 schema,它包含了四个属性:
- name:字符串类型。
- age:数字类型。
- email:字符串类型。
- createTime:日期类型,如果没有指定则默认为当前时间。
当我们将这个 schema 应用到 MongoDB 数据库中时,就可以以这个格式存储数据集合中的文档。
- 约束条件
除了属性类型和默认值之外,Mongoose schema 还支持各种约束条件,用于限制属性的取值范围和格式等。下面我们将介绍几种常用的约束条件。
1)必填约束
有时我们需要确保某些属性不为空,可以使用 required 约束:
const userSchema = new mongoose.Schema({ name: { type: String, required: true }, age: Number, email: String });
这样,如果添加的文档中没有指定 name 属性或者 name 属性为空字符串,则会抛出错误。
2)唯一值约束
如果一个属性需要保证唯一性,可以使用 unique 约束:
const userSchema = new mongoose.Schema({ name: { type: String, unique: true }, age: Number, email: String });
这样,如果添加的文档中的 name 属性已经存在,则会抛出错误。
3)枚举约束
如果一个属性的取值只能从指定的一组值中选取,可以使用 enum 约束:
const userSchema = new mongoose.Schema({ gender: { type: String, enum: ['male', 'female'] }, age: Number, email: String });
这样,如果添加的文档中的 gender 属性值不是 'male' 或 'female',则会抛出错误。
4)自定义约束
除了上述内置的约束条件之外,还可以自定义约束条件。比如我们可以定义一个长度 >= 6 的密码:
// javascriptcn.com 代码示例 const userSchema = new mongoose.Schema({ username: String, password: { type: String, validate: { validator: function(value) { return value.length >= 6; }, message: 'Password must be at least 6 characters long.' } } });
这里使用了 validate 约束,它是一个对象,包含一个 validator 函数和一个 message 字符串。validator 函数用于实现自定义的验证逻辑,如果验证不通过则会抛出一个错误提示信息。
- 嵌套 schema
在 MongoDB 中,我们可以把文档中某个属性定义为另一个文档的嵌套属性。Mongoose schema 也支持嵌套 schema 的定义,使得我们可以更加灵活地组织文档结构。
下面是一个嵌套 schema 的示例代码:
// javascriptcn.com 代码示例 const commentSchema = new mongoose.Schema({ content: String, createTime: { type: Date, default: Date.now } }); const postSchema = new mongoose.Schema({ title: String, content: String, author: String, createTime: { type: Date, default: Date.now }, comments: [commentSchema] }); module.exports = mongoose.model('Post', postSchema);
在这个示例代码中,定义了一个名为 Post 的 schema,它包含了五个属性:
- title:字符串类型。
- content:字符串类型。
- author:字符串类型。
- createTime:日期类型,如果没有指定则默认为当前时间。
- comments:评论列表,它的类型是一个嵌套 schema。
- 总结
本文介绍了 Mongoose schema 的基本用法、约束条件以及嵌套 schema 等相关知识,并结合实例代码进行了详细讲解。需要注意的是,实际应用中可能会有更加复杂的数据结构和验证规则,需要根据实际情况进行调整。
总之,Mongoose schema 是 Mongoose 中非常重要的一环,对于 MongoDB 数据库的操作具有重要的指导意义。希望读者通过本文的学习,能够掌握基本的 schema 定义方法,并能够根据实际需求进行相应的扩展和改造。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653dc60f7d4982a6eb7774d2