Mongoose Schema 的默认值设置方法

在使用 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,其中包含了 nameemailage 三个字段。

设置默认值

默认值可以为任何能够被赋值的 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 属性为 nameemailagehobbiesaddress 字段设置了默认值。

需要注意的是,如果某个字段为一个对象或数组,则默认值必须为一个函数或者一个对象。如果默认值为一个函数,该函数将返回一个新的空对象或数组。例如:

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