Nodejs 中 mongoose 的 Schema 详解

在 Nodejs 中,使用 mongoose 连接 MongoDB 数据库是非常方便的。而 mongoose 中的 Schema 是非常重要的一部分,它定义了数据的结构和类型,对数据的操作也是基于 Schema 来进行的。本文将详细介绍 mongoose 中的 Schema,包括定义 Schema、Schema 中的字段类型、虚拟属性、中间件等内容。

定义 Schema

在 mongoose 中定义 Schema 非常简单,只需要使用 mongoose.Schema 构造函数即可。例如,定义一个名为 User 的 Schema:

上述代码创建了一个名为 User 的 Schema,包含了 nameageemail 三个字段。其中,nameemail 是字符串类型,age 是数字类型。这里需要注意的是,mongoose 中的 Schema 可以包含嵌套的子文档,例如:

上述代码中,address 字段是一个嵌套的子文档,包含了 citystreetzipcode 三个子字段。

Schema 中的字段类型

mongoose 中的 Schema 支持多种字段类型,包括:

  • String:字符串类型
  • Number:数字类型
  • Date:日期类型
  • Boolean:布尔类型
  • Buffer:二进制类型
  • ObjectId:MongoDB 的 ObjectId 类型
  • Mixed:混合类型
  • Array:数组类型

在定义字段时,可以指定字段的类型,例如:

上述代码中,avatar 字段是二进制类型,created_at 字段是日期类型,is_admin 字段是布尔类型,friends 字段是字符串数组类型。

虚拟属性

虚拟属性是指在 Schema 中定义的,但是不会保存到数据库中的属性。虚拟属性通常用于返回计算得出的值或者格式化后的值。在 mongoose 中,可以使用 getset 方法定义虚拟属性,例如:

上述代码中,定义了一个名为 avatar_url 的虚拟属性,它的值是根据 name 字段计算得出的头像 URL。在使用时,可以直接访问该属性:

中间件

在 mongoose 中,中间件是指在执行某个操作前或者后自动执行的函数。中间件可以用来实现一些预处理、后处理的逻辑,例如验证、自动填充等。mongoose 支持多种中间件,包括:

  • pre:在执行某个操作前执行的中间件
  • post:在执行某个操作后执行的中间件
  • validate:在验证某个字段时执行的中间件
  • init:在初始化 Schema 时执行的中间件

下面是一个例子,定义了一个 pre 中间件,用来在保存用户信息前自动填充 created_at 字段:

上述代码中,使用 pre 方法定义了一个在保存数据前执行的中间件,该中间件会自动填充 created_at 字段。在执行保存操作时,中间件会自动执行,完成填充操作。

总结

本文介绍了 mongoose 中的 Schema,包括定义 Schema、Schema 中的字段类型、虚拟属性、中间件等内容。使用 mongoose 中的 Schema 可以很方便地定义数据结构和类型,并且可以实现一些预处理、后处理的逻辑,非常实用。

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


纠错
反馈