Mongoose 是一个优秀的 Node.js ORM 框架,可以帮助我们更方便地操作 MongoDB 数据库。在 Mongoose 中,Model 是一个非常重要的概念,它对应了 MongoDB 中的一个集合(collection),并且提供了对该集合的 CRUD 操作。
在定义 Mongoose Model 的时候,我们可以为每个属性设置默认值,这样在创建新文档时,如果没有指定该属性的值,就会使用默认值。本文将介绍 Mongoose Model 默认值的设置及其应用场景。
Mongoose Model 默认值的设置
Mongoose Model 默认值的设置非常简单,只需要在定义 Schema 时为每个属性设置 default 属性即可。例如,我们定义一个用户(User)模型,包含了用户名(name)、年龄(age)和性别(gender)三个属性,其中年龄和性别有默认值:
// www.javascriptcn.com code example
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
age: { type: Number, default: 18 },
gender: { type: String, default: '男' }
});
const User = mongoose.model('User', userSchema);
module.exports = User;在上面的代码中,我们为年龄和性别属性分别设置了默认值为 18 和 '男'。当创建新的用户文档时,如果没有指定年龄和性别,就会使用这些默认值。
Mongoose Model 默认值的应用场景
Mongoose Model 默认值的应用场景非常广泛,下面介绍几个常见的场景。
1. 数据库迁移
在进行数据库迁移时,我们可能需要为新的文档设置默认值,以避免因为数据结构变化导致的错误。例如,我们在旧的用户模型中没有性别属性,但是在新的用户模型中添加了性别属性,这时我们可以为性别属性设置默认值来避免旧的文档因为缺少性别属性而报错。
2. 数据库初始化
在进行数据库初始化时,我们可能需要为每个文档设置默认值,以保证数据的完整性。例如,我们在初始化用户数据时,可以为每个用户设置默认的年龄和性别,避免因为数据缺失而导致的错误。
3. 接口参数校验
在进行接口参数校验时,我们可能需要为某些参数设置默认值,以避免因为参数缺失而导致的错误。例如,我们在创建用户接口中,可以为年龄和性别参数设置默认值,避免因为客户端没有传递这些参数而导致的错误。
示例代码
下面是一个完整的示例代码,演示了如何在 Mongoose Model 中设置默认值,并且介绍了如何应用在数据库迁移、数据库初始化和接口参数校验等场景中。
// www.javascriptcn.com code example
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
const userSchema = new mongoose.Schema({
name: String,
age: { type: Number, default: 18 },
gender: { type: String, default: '男' }
});
const User = mongoose.model('User', userSchema);
async function migrate() {
// 数据库迁移
await User.updateMany({ gender: { $exists: false } }, { gender: '男' });
}
async function init() {
// 数据库初始化
await User.create({ name: '张三' });
await User.create({ name: '李四', age: 20, gender: '女' });
}
async function createUser(name, age = 18, gender = '男') {
// 接口参数校验
const user = new User({ name, age, gender });
await user.save();
}
migrate();
init();
createUser('王五');
createUser('赵六', 22);
createUser('孙七', 20, '女');在上面的代码中,我们定义了一个用户模型,包含了用户名、年龄和性别三个属性,并且为年龄和性别属性设置了默认值。然后我们演示了如何在数据库迁移、数据库初始化和接口参数校验等场景中应用这些默认值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d8d305a941bf7134f6da38