Mongoose 是 JavaScript 中最流行的 MongoDB 驱动程序之一, Mongoose Schema 是用于定义 MongoDB 文档的的一种简单、可重复使用的方法。Mongoose Schema 使得开发人员可以定义文档结构、验证规则以及设置默认值。这篇文章将介绍如何使用 Mongoose Schema 配置默认值。
了解 Mongoose Schema
Mongoose Schema 是用于定义 MongoDB 文档的一个类。文档是 MongoDB 中的基本数据单元,可以理解为关系数据库中的表的行。Mongoose Schema 允许开发人员定义文档中的属性并设置其验证规则和默认值。每个文档都有一个对应的 Mongoose 模式定义。
下面是一个使用 Mongoose Schema 定义用户文档的示例:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ username: { type: String, required: true }, email: { type: String, required: [true, 'Email address is required'], unique: true }, birthdate: { type: Date, default: Date.now } }); const User = mongoose.model('User', userSchema); module.exports = User;
在上面的示例中,我们使用 Mongoose Schema 定义了一个用户文档,并为其定义了三个属性: username
, email
和 birthdate
。每个属性都有一个类型和一组验证规则。birthdate
属性包含一个 default
关键字,它允许我们在没有提供值的情况下使用当前日期作为默认值。
现在我们来看看如何使用 Mongoose Schema 配置默认值。
使用默认值
Mongoose Schema 允许开发人员为文档的每个属性设置默认值。Mongoose 支持许多不同类型的默认值,包括数字、字符串、布尔值、数组和对象等。开发人员可以通过在属性定义中使用 default
关键字来设置默认值。下面是一个使用 default
关键字设置默认值的示例:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name: { type: String, required: true }, age: { type: Number, default: 25 // 设置默认值为25 }, isActive: { type: Boolean, default: true // 设置默认值为true }, tags: { type: Array, default: ['web', 'mobile', 'desktop'] // 设置默认值为一个字符串数组 }, details: { type: Object, default: { city: 'Shanghai', country: 'China' } // 设置默认值为一个对象 } }); const User = mongoose.model('User', userSchema); module.exports = User;
在上面的示例中,我们使用 default
关键字为用户文档中的每个属性设置一个默认值,这包括 age
、isActive
、tags
和 details
等属性。
何时使用默认值?
在以下情况下,使用默认值是非常有用的:
- 当开发人员希望在文档中的某个属性不存在时自动为其分配一个值时。
- 当开发人员希望防止文档属性为空时。
- 在开发人员期望没有合适的值时,使用默认值作为后备值。
- 其他一些场景,当开发人员觉得有必要使用默认值时。
总结
Mongoose Schema 允许开发人员在定义 MongoDB 文档时设置默认值。使用 default
关键字可以设置默认值,这有助于确保属性始终具有默认值。这篇文章提供了一个关于如何使用 Mongoose Schema 配置默认值的示例,并解释了何时最好使用默认值。如果您想了解更多关于 Mongoose Schema 的知识,请参考官方文档。
参考资料
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6527c7317d4982a6eba5e4cb