Mongoose 是一款开源的 Node.js MongoDB ODM(Object-Document Mapping),它是以一种优雅的方式将 Node.js 和 MongoDB 结合在一起。在使用 Mongoose 时,我们需要定义每个数据模型的结构,这个结构在 Mongoose 中被称作 Schema。一个 Mongoose Schema 提供了我们在创建和查询 MongoDB 文档时所需的一些额外的功能。
在 Mongoose 中,不同数据值可以采用不同的 Schema 类型进行定义,因此本文将从 Schema 类型的角度,为大家详细介绍 Mongoose 中常用的 schema 类型,以及如何使用这些类型定义数据模型。
类型列表
- String:字符串类型
- Number:数字类型
- Date:日期类型
- Buffer:二进制类型
- Boolean:布尔类型
- Mixed:混合类型,接受任何类型的数据
- ObjectId:此类型是用来定义 MongoDB 文档 _id 属性的,通常用于关联文档
- Array:数组类型
String
String 类型对应 JavaScript 的 String 类型。在 Mongoose 中,String 的长度默认为 255 个字符,如果需要可在定义时指定最大长度,例如:
----- ------ - --- ----------------- ----- - ----- ------- ---------- -- -- ----- -- --- -- -------- ------ -- --------- --- --- ---
Number
Number 类型对应 JavaScript 的 Number 类型。在 Mongoose 中,值支持整型和浮点型,可以通过 min
和 max
来限制数值范围:
----- ------ - --- ----------------- ---- - ----- ------- ---- ---- --------- ---- ---- -------- - ---
Date
Date 类型对应 JavaScript 的 Date 类型。在 Mongoose 中,Date 可以被指定为时间戳或 ISODate 字符串,例如:
----- ------ - --- ----------------- ----- - ----- ----- -------- -------- -- -------- - ---
Buffer
Buffer 类型对应于 Node.js 中 buffer 类型,在 Mongoose 中通常用于存储二进制数据。例如:
----- ------ - --- ----------------- ------- ------ -- ------------ ---
Boolean
Boolean 类型对应 JavaScript 的 Boolean 类型。在 Mongoose 中,Boolean 的默认值是 false:
----- ------ - --- ----------------- ----- - ----- -------- -------- ----- - ---
Mixed
Mixed 类型接收任何类型的数据,可以用于存储复杂的非结构化数据,例如:
----- ------ - --- ----------------- ----- ----- -- --------- ---
ObjectId
ObjectId 类型是用来定义 MongoDB 文档 _id 属性的,通常用于关联文档。例如:
----- ------ - --- ----------------- ------- - ----- ------------------------------- ---- ------ -- --- ---- -- - ---
Array
Array 类型可用于存储数组类型的数据,可以用来定义列表、一对多关系等。例如:
----- ------ - --- ----------------- ----- - ----- --------- -- ---------- --------- ----- --------- - ---------- -------- --- - ------ - -- -------- - -- -- -------- ----------- - - ---
总结
本文介绍了 Mongoose 中常用的 schema 类型以及每个类型的定义和使用方式,这些类型的使用可以让我们在定义数据模型时更加规范和严谨,同时也为我们进行 CRUD 操作提供了更多的开发效率。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/645621e2968c7c53b09648e8