在使用 Mongoose 进行开发时,定义数据模型是必不可少的。Mongoose 的 Schema 提供了一种定义数据模型的方式,不仅可以定义数据类型、验证规则等属性,还可以设置默认值。本文将介绍如何设置 Mongoose Schema 的默认值。
Mongoose Schema
Mongoose Schema 是 Mongoose 提供的一种用于定义 MongoDB 数据库中集合的数据结构的方式。它的语法类似于 JavaScript 对象字面量,我们可以用这种方式来定义我们的数据结构。下面是一个简单的示例:
const { Schema } = require('mongoose'); const userSchema = new Schema({ name: String, email: String, age: Number });
在上述示例中,我们定义了一个名为 userSchema
的 Schema,其中包含了 name
、email
和 age
三个字段。
设置默认值
默认值可以为任何能够被赋值的 JavaScript 类型,包括字符串、数字、布尔值、数组和对象等等。在 Mongoose 中,我们可以在 Schema 中定义默认值,如下所示:
const { Schema } = require('mongoose'); const userSchema = new Schema({ name: { type: String, default: 'John Doe' }, email: { type: String, default: '' }, age: { type: Number, default: 18 }, hobbies: { type: [String], default: [] }, address: { type: Object, default: {} } });
在上述示例中,我们通过 default
属性为 name
、email
、age
、hobbies
和 address
字段设置了默认值。
需要注意的是,如果某个字段为一个对象或数组,则默认值必须为一个函数或者一个对象。如果默认值为一个函数,该函数将返回一个新的空对象或数组。例如:
const { Schema } = require('mongoose'); const userSchema = new Schema({ name: { type: String, default: 'John Doe' }, email: { type: String, default: '' }, age: { type: Number, default: 18 }, hobbies: { type: [String], default: function() { return []; } }, address: { type: Object, default: function() { return {}; } } });
指导意义
在实际的开发中,我们需要对数据进行初始化,确保在没有任何数据输入的情况下,也可以正常运行。此时可以设置默认值,使得我们的程序不会因为数据的不完整而出现错误。
此外,设置默认值还可以用于处理一些特殊的需求。例如,我们可能需要在用户注册时,自动为其生成一个唯一的 ID。这时,我们可以通过设置默认值为函数,来实现自动为该字段赋值的功能。例如:
const { Schema } = require('mongoose'); const userSchema = new Schema({ name: { type: String, default: 'John Doe' }, email: { type: String, default: '' }, age: { type: Number, default: 18 }, hobbies: { type: [String], default: function() { return []; } }, address: { type: Object, default: function() { return {}; } }, Id: { type: Number, default: function() { const d = new Date(); return d.getTime(); } } });
示例代码
下面是一个完整的示例代码,供读者参考:
const mongoose = require('mongoose'); const { Schema } = mongoose; mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true }); const userSchema = new Schema({ name: { type: String, default: 'John Doe' }, email: { type: String, default: '' }, age: { type: Number, default: 18 }, hobbies: { type: [String], default: function() { return []; } }, address: { type: Object, default: function() { return {}; } }, Id: { type: Number, default: function() { const d = new Date(); return d.getTime(); } } }); const User = mongoose.model('User', userSchema); const newUser = new User({ name: 'Tom', email: 'tom@test.com', age: 22, hobbies: ['coding', 'music'], address: { country: 'China', city: 'Shanghai', street: 'Nanjing Road' } }); newUser.save((err, result) => { if (err) { console.log(err); } else { console.log(result); } });
在上述示例中,我们定义了一个名为 User
的 Mongoose 模型,并为其设置了默认值。然后,我们创建一个新的 User
实例,并将其保存到 MongoDB 中。由于该实例的默认值已经设置好了,如果用户没有为该实例的某个属性赋值,则会使用其默认值。最终,我们可以通过 console.log
输出结果,检查是否成功保存到数据库中。
总结
Mongoose Schema 提供了一种方便、灵活的方式来定义 MongoDB 数据库中集合的数据结构。通过在 Schema 中设置默认值,我们可以为数据添加初始值,防止在没有数据输入的情况下出现错误。设置默认值还可以用于处理一些特定的需求,例如自动生成 ID 等。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ad04f1add4f0e0ff697d65