MongoDB 基本数据类型

136 阅读2分钟

基本数据类型

数据类型描述
Double存储浮点值
String必须是 UTF-8 编码的字符串
Object用于嵌入文档
Array存储数组
Binary data存储二进制数据
ObjectId12字节,一般作用于 _id
Boolean存储 true or false
Date64位整数,表示自Unix epoch以来的毫秒数。用于存储时间
Null存储 Null 值
32-bit integer32 位整型,int
64-bit integer64 位整型,long
Decimal128存储 decimal
Timestamp64位, MongoDB 内部使用的数据类型

ObjectId

MongoDB 每个集合的文档都有一个 _id 字段,用于标识该文档在集合中的唯一性。
如果未主动设置 _id,MongoDB client 会用 ObjectId 赋值 _id
在 MongoDB shell 中,输入
ObjectId()
输出为:
ObjectId("6627bdb6dcf351c55d07c83a")
以下为 ObjectId 生成规则

image.png

注: ObjectId 只是有递增的趋势,并非单调递增

ObjectId 有 2 个方法

  • ObjectId().getTimestamp()
    获取 ObjectId 的时间戳,返回的是 ISO 格式的日期
    ISODate("2024-04-23T14:08:47.000Z")
  • ObjectId().toString()
    获取 ObjectId 的 16进制字符串
    6627c0efdcf351c55d07c843

在 MongoDB 官方文档介绍中,_id 使用 ObjectId() 有以下 2 个优点

  • 可以通过 ObjectId().getTimestamp() 获取文档的创建时间。
  • 通过对 ObjectId 进行排序,相等于对创建时间进行排序

个人看法:

  1. ObjectId 类似 MySQL 中的自增ID,一般不对外暴露。一般使用中,可以再生成一个供外部可见的唯一ID
  2. 在深度翻页中,可以和 MySQL 一样,将 ObjectId() 作为翻页的起点。 例如 db.test.find({_id:{$gt: new ObjectId("6627c422dcf351c55d07c845")}}).sort({_id:1}).skip(1).limit(10)

Date

MongoDB 中的 Date 类型,是 64位 的整型,表示自 Unix epoch 依赖的 毫秒数。 可以使用 new Date() 创建时间类型。
在 MongoDB 中,Date 均已 ISO 格式进行展示。
例如 ISODate("2024-04-23T14:47:32.805Z")
MySQL DateTime 类型与 MongoDB Date 类似。不过需要注意的是 MySQL DateTime 只能 精确到秒,无法精确到毫秒

Timestamp

Timestamp 是 MongoDB 内部使用的数据类型。不建议在开发中使用该数据类型。
它由 2 部分组成
image.png 从上面的结构得出,在单个 MongoDB 实例中,Timestamp 绝对是唯一的。
Timestamp 用于 MongoDB 中的复制、分片功能中,用于跟踪和确保数据的一致性。在执行 DML 语句时,MongoDB 会为每条 DML 语句生成 Oplog,Oplog 的 ts 字段就是 Timestamp 类型。