Mongoose Schema 中的虚函数使用的方法

前言

提到 Node.js 的数据库 ORM 库,Mongoose 可谓是最受欢迎的。在使用 Mongoose 的时候,我们经常要用到 Schema,Schema 可以理解为表的结构描述,定义了表里面的字段名、类型、限制等。同时,Mongoose 的 Schema 中还提供了虚函数 virtual 的概念,本文将详细介绍如何在 Mongoose 中使用虚函数。

背景

在 Mongoose 中,虚函数是通过 Schema.Types 中的 VirtualType 来定义的。虚函数是指模型定义中并不在数据库表中的计算属性。虚函数可以作为模型的属性被访问,但并不存储在数据库中。虚函数在某些情况下是非常有用的,比如我们需要通过代码计算得出的值而不是直接从数据库读取的值。

实现

虚函数的创建非常简单,只需要在定义 Schema 时候使用 virtual 函数即可。例如,我们需要为用户定义一个虚函数用于计算年龄。

const userSchema = new mongoose.Schema({
  name: String,
  dob: Date
});

userSchema.virtual('age').get(function () {
  const dob = this.dob;
  const age = new Date().getFullYear() - dob.getFullYear();
  return age;
});

在上面的代码中,我们首先定义了一个用户的 Schema,其中包含 namedob 两个字段。接着我们使用 virtual 函数定义了一个名叫 age 的虚函数,这个虚函数的实现是通过计算出出生日期和当前日期来得到年龄。注意,在虚函数的实现中,我们使用了 this.dob 代表了当前用户的出生日期。

如何使用

当我们完成上面的代码后,就可以在实际使用中使用该虚函数了。实际上,虚函数的使用和普通属性的使用没有什么区别。可以使用 user.get('age') 或者 user.age 来获取该虚函数的值。例如:

const User = mongoose.model('User', userSchema);

const user = new User({
  name: 'Tom',
  dob: new Date(1990, 0, 1)
});

console.log(user.age); // 输出 31

这里我们首先使用 mongoose.model 创建了一个用户模型,然后创建了一个名叫 Tom,出生日期为 1990 年 1 月 1 日的用户。接着我们就可以使用 user.age 来获取该虚函数的值了。

总结

本文主要介绍了在 Mongoose Schema 中如何使用虚函数。虚函数使用起来非常简单,只需要使用 Schema.Types 中的 VirtualType 来定义即可。自己动手实现一下本文的示例代码,体验一下虚函数的使用吧!

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