在使用 Node.js 开发 Web 应用程序时,Mongoose 是一个非常流行的对象模型工具。它提供了对 MongoDB 数据库的访问和管理,可以轻松地进行 CRUD 操作。
在 Mongoose 中,Schema 是一个非常重要的概念,它定义了文档的结构和属性。在此篇文章中,我们将详细介绍 Mongoose Schema 类型列表以及常见类型的详解。
Mongoose Schema 类型列表
Mongoose 中定义了多种类型,以下是一些常见的类型列表:
- String(字符串类型)
- Number(数字类型)
- Date(日期类型)
- Buffer(二进制数据)
- Boolean(布尔类型)
- Mixed(混合类型)
- ObjectId(MongoDB 对象 ID)
- Array(数组)
接下来我们将分别对这些类型进行简介和详解。
String 类型
String 类型很常见,它代表一个字符串。它支持以下验证器和选项:
验证器
- required:表示该字符串必填。
- minlength:表示该字符串的最小长度。
- maxlength:表示该字符串的最大长度。
- match:使用正则表达式进行字符串匹配。
选项
- enum:限定字符串的取值范围。
Number 类型
Number 类型代表一个数字。它支持以下选项和验证器:
验证器
- min:最小值。
- max:最大值。
选项
- default:默认值。
Date 类型
Date 类型代表一个日期对象。它支持以下选项和验证器:
验证器
- min:最小日期。
- max:最大日期。
选项
- default:默认值。
Buffer 类型
Buffer 类型代表二进制数据。它没有特殊的选项和验证器。
Boolean 类型
Boolean 类型代表一个布尔值。它没有特殊的选项和验证器。
Mixed 类型
Mixed 类型允许我们在一个文档中储存任何数据类型,是一种非常灵活的数据类型。它没有特殊的选项和验证器。
ObjectId 类型
ObjectId 类型代表 MongoDB 的对象 ID。它没有特殊的选项和验证器。
Array 类型
Array 类型代表一个数组,可以存储任何类型的数据。它支持以下选项和验证器:
验证器
- minlength:数组的最小长度。
- maxlength:数组的最大长度。
选项
- default:默认值。
示例代码
接下来我们将用一个例子来说明以上类型的用法:
// www.javascriptcn.com code example
const mongoose = require('mongoose');
const { Schema } = mongoose;
const userSchema = new Schema({
name: {
type: String,
required: true,
minlength: 3,
maxlength: 20,
},
age: {
type: Number,
min: 18,
max: 60,
default: 18,
},
email: {
type: String,
match: /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/,
},
birthday: {
type: Date,
max: Date.now(),
},
avatar: {
type: Buffer,
},
isOnline: {
type: Boolean,
default: false,
},
personalInfo: {
type: Mixed,
},
friends: {
type: [ObjectId],
default: [],
},
});
const User = mongoose.model('User', userSchema);以上代码定义了一个用户的 Schema,它包含了 name(必填的字符串类型,长度在 3 和 20 之间)、age(数字类型,范围在 18 到 60 之间,如果没有值则默认为 18)、email(字符串类型,需要符合指定的正则表达式)、birthday(日期类型,不晚于当天)、avatar(二进制数据类型)、isOnline(布尔类型,默认值为 false)、personalInfo(混合类型)和 friends(ObjectId 类型数组,默认为空数组)。
当我们创建用户数据时,就需要按照以上 Schema 中所设定的类型来进行构造。例如,创建一个用户的代码如下:
// www.javascriptcn.com code example
const user = new User({
name: 'Tom',
age: 22,
email: 'tom@email.com',
birthday: new Date(1999, 9, 10),
avatar: new Buffer('图片二进制数据'),
isOnline: true,
personalInfo: {
bio: 'I am Tom.',
},
friends: [new ObjectId(), new ObjectId()],
});以上代码创建了一个名为 Tom 的用户,他的年龄为 22 岁,生日为 1999 年 10 月 10 日,头像的二进制数据为 '图片二进制数据',他的个人信息是一个对象,包含了一个自我介绍,他有两个好友,这两个好友的 ID 分别为两个新生成的 ObjectId。
小结
在本篇文章中,我们详细介绍了 Mongoose Schema 类型列表以及常见类型的详解。在使用 Mongoose 构建应用时,选择合适的类型非常重要,他们可以帮我们更加规范和方便地管理数据。希望读者可以根据以上的介绍,灵活运用 Mongoose 中的不同类型,创造出更加优秀、高效的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d7c400a941bf7134de8cd0