MongoDB 数据类型

MongoDB 和传统数据库类似,也为字段(列)提供了数据类型,下表为 MongoDB 中常用的几种数据类型:

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式

注意:BSON 字符串都是 UTF-8 编码。

String 字符串

String 类型用于表示文本数据。在 MongoDB 中,字符串的长度可以是 0 到 2^31-1 个字符。可以通过两种方式来声明一个 String 类型:

(1)直接把字符串值插入到文档中,例如:

db.users.insert({name: "张三", email: "zhangsan@example.com"})

(2)使用 new String() 构造函数,例如:

var str = new String("Hello World");

Integer 整型

Integer 类型用于表示整数数据。在 MongoDB 中,整数的范围是 -2^31 ~ 2^31-1,可以通过两种方式来声明一个 Integer 类型:

(1)直接把整数值插入到文档中,例如:

db.users.insert({age: 28, salary: 10000})

(2)使用 new Number() 构造函数,例如:

var num = new Number(123);

Double 双精度型

Double 类型用于表示浮点数数据。在 MongoDB 中,浮点数的范围是 -1.7976931348623157E+308 ~ 1.7976931348623157E+308,可以通过两种方式来声明一个 Double 类型:

(1)直接把浮点数值插入到文档中,例如:

db.products.insert({price: 9.99, weight: 2.5})

(2)使用 new Number() 构造函数,并将参数设置为浮点数,例如:

var num = new Number(3.14);

Boolean 布尔型

Boolean 类型用于表示逻辑数据,即 true 或 false。在 MongoDB 中,可以通过两种方式来声明一个 Boolean 类型:

(1)直接把布尔值插入到文档中,例如:

db.users.insert({isManager: true, isAdmin: false})

(2)使用 new Boolean() 构造函数,例如:

var b1 = new Boolean(false);
var b2 = new Boolean(true);

Null 空类型

Null 类型用于表示空值。在 MongoDB 中,可以直接把 null 值插入到文档中,例如:

db.users.insert({gender: null})

Object 对象类型

Object 类型用于表示嵌套文档数据。在 MongoDB 中,可以使用花括号 {} 来声明一个 Object 类型。例如:

db.users.insert({name: "张三", address: {city: "北京", street: "天安门"}})

Array 数组类型

Array 类型用于表示多个值的列表数据。在 MongoDB 中,可以使用方括号 [] 来声明一个 Array 类型。例如:

db.users.insert({name: "张三", scores: [80, 85, 90]})

需要注意的是,MongoDB 数组可以包含不同的数据类型。例如:

db.users.insert({name: "张三", data: [null, "Hello", 123]})

ObjectId

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,如下图:

file://C:/Users/ADMINI~1/AppData/Local/Temp/.PESW91/1.pngMongoDB 数据类型

其中:

  • 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时

  • 接下来的 3 个字节是机器标识码

  • 紧接的两个字节由进程 id 组成 PID

  • 最后三个字节是随机数

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象

由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间,例如:

> var obj = new ObjectId()
> obj.getTimestamp()
ISODate("2023-08-22T05:39:27Z")

如何将 ObjectId 转为字符串,例如:

> var obj = new ObjectId()
> obj.str
64e44a0f7b7adad005847ad3

时间戳

BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的日期类型不相关。时间戳值是一个 64 位的值。其中:

  • 前32位是一个 time_t 值(与 Unix 新纪元相差的秒数)

  • 后32位是在某秒中操作的一个递增的序数

在单个 mongod 实例中,时间戳值通常是唯一的。在 MongoDB 复制集中,oplog 有一个 ts 字段,这个字段中的值使用 BSON 时间戳表示了操作时间。

BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。

在 MongoDB 中,可以使用 Timestamp() 函数来声明一个 Timestamp 类型。例如:

db.events.insert({eventName: "click", timestamp: Timestamp(1641043600, 1)})

日期(Date)

MongoDB 中的日期表示当前距离 Unix 新纪元(1970年1月1日)的毫秒数。日期类型是有符号的,负数表示 1970 年之前的日期。例如:

# 格林尼治时间
> var d1 = new Date()
> d1
ISODate("2023-08-22T05:44:31.788Z")
> typeof d1
object

# 格林尼治时间
> var d2 = ISODate()
> d2
ISODate("2023-08-22T05:44:48.835Z")
> typeof d2
object

# 日期转为字符串
> d1.toString()
Tue Aug 22 2023 13:44:31 GMT+0800
> typeof d1.toString()
string

> Date()
Tue Aug 22 2023 13:46:32 GMT+0800
> typeof Date()
string
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号