Mongoose 中的 Schema 默认值设置与应用场景

前言

在使用 Mongoose 进行数据存取时,Schema 是一个必备的概念。Schema 定义了数据的格式和类型,对于数据的读取和存储有着至关重要的作用。在实际开发中,经常需要对数据进行初始化或者默认值的设置,这时候,Mongoose 的 Schema 默认值设置就发挥了很大的作用。

本文将详细介绍 Mongoose 中的 Schema 默认值设置,包括默认值的设置方式、应用场景以及示例代码,帮助读者了解如何合理和高效地使用 Mongoose。

Schema 默认值设置的方式

Mongoose 的 Schema 默认值设置有多种方式,在这里我们分别介绍常用的两种方式:

使用对象字面量设置默认值

这种方式是通过在 Schema 中使用对象字面量来进行默认值的设置。具体的代码如下所示:

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    default: 'unknown'
  },
  age: {
    type: Number,
    default: 0
  }
});

在上述的代码中,我们为字段 nameage 分别设置了默认的值 'unknown' 和 0。如果用户没有输入这两个字段的值,那么默认值就会被保存到数据库中。

使用函数设置默认值

这种方式是通过定义一个函数来进行默认值的设置。函数的返回值即为默认值。具体的代码如下所示:

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    default: function() {
      return 'unknown';
    }
  },
  age: {
    type: Number,
    default: function() {
      return 0;
    }
  }
});

在上述的代码中,我们同样为字段 nameage 分别设置了默认值 'unknown' 和 0。不同的是,我们使用了函数来进行默认值的设置。

Schema 默认值设置的应用场景

Schema 默认值设置可以应用于很多场景,例如:

对于静态类型的默认初始化

在 Mongoose 中,Schema 可以非常方便地用来初始化数据,对于一些静态类型的数据初始化,使用默认值设置便显得十分方便。比如用户注册时,可以设置默认的用户昵称和性别,这样就可以免去用户在注册时输入的麻烦。

对于动态类型的默认初始化

对于动态类型的数据初始化,Schema 也同样适用。比如针对时间戳类型的字段,我们可以通过设置默认值为 Date.now 来自动获取当前时间戳。这样一来,不必手动为每条记录设置时间戳,而是在新增数据时,自动为其添加时间戳的记录。

对于默认值的类型考虑

在设置默认值时,我们需要考虑默认值的类型是否与这个字段的类型一致。例如,如果某个字段是数字类型,那么默认值也应该是数字类型,而不能是字符串类型。因为如果默认值的类型不一致,会导致程序在运行时出现类型错误,比如使用字符串类型的默认值去进行数值计算,就可能引起错误。

Schema 默认值设置的示例代码

下面我们来看一个完整的示例代码,具体示例代码用到了前面提到的两种默认值设置方式:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const personSchema = new Schema({
  name: {
    type: String,
    default: 'unknown'
  },
  age: {
    type: Number,
    default: 0
  },
  gender: {
    type: String,
    default: function() {
      if (this.age > 18) {
        return 'male';
      } else {
        return 'female';
      }
    }
  },
  createTime: {
    type: Date,
    default: Date.now
  }
});

const Person = mongoose.model('Person', personSchema);

const person = new Person({
  name: 'Mia',
  age: 20
});

person.save(function(err) {
  if (err) {
    console.log(err);
  } else {
    console.log('save person success');
  }
});

上述代码中,我们定义了一个叫做 Person 的 Schema,为其中的 nameagegendercreateTime 分别设置了默认值。其中 gender 的默认值是通过函数计算而来,而 createTime 的默认值是通过调用 Date.now 来获取。

在最后一段代码中,我们对 Person 模型进行了新增操作,并且只给了 nameage 字段的值,因为其他字段已经有默认值了。执行完插入操作后,我们可以在数据库中看到插入的数据记录。

总结

通过使用 Mongoose 中的 Schema 默认值设置,可以有效提升开发效率,减少代码量。在使用时,需要考虑字段的类型以及数据的默认值。本文通过介绍了两种设置默认值的方式,以及应用场景和示例代码,希望读者可以掌握 Mongoose 中 Schema 默认值设置的使用方法。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6591f2c8eb4cecbf2d6e483c


纠错
反馈