MongoDB ObjectId 用来标识集合中的唯一行
其实在前面几个章节中我们已经使用了 MongoDB ObjectId
本章节,我们将学习 ObjectId 的结构
ObjectId 是一个 12 字节 BSON 类型数据,由以下几部分组成
- 前 4 个字节表示时间戳
- 接下来的3个字节是机器标识码
- 紧接的两个字节由进程 id 组成( PID )
- 最后三个字节是随机数
MongoDB中存储的文档必须有一个 _id 键 这个键的值可以是任何类型的,默认是 ObjectId 对象
在一个集合里面,每个文档都有唯一的 _id 值,来确保集合里面每个文档都能被唯一标识
MongoDB 采用 ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时
MongoDB 创建新的 ObjectId
下面的代码可以生成新的 ObjectId
> newid = ObjectId()
ObjectId("59ef2598a0f7c7d445f864b3")
可以使用生成的 id 来取代 MongoDB 自动生成的 ObjectId
创建文档的时间戳
由于 ObjectId 中存储了 4 个字节的时间戳
所以我们不需要再为文档保存时间戳字段,因为可以通过 getTimestamp 函数来获取文档的创建时间
> ObjectId("59ef2598a0f7c7d445f864b3").getTimestamp()
ISODate("2017-10-24T11:35:52Z")
ObjectId 转换为字符串
str 属性可以返回 ObjectId 的字符串格式
> ObjectId("59ef2598a0f7c7d445f864b3").str
59ef2598a0f7c7d445f864b3
最新评论
徒弟可以A师傅,学生可以A老师,为什么外包不能A正式,我觉得很正常。异性相吸这是宇宙真理
PHP天下第一(狗头叼花)
第一个不需要关注公主号直接给激活码的帖子!
客户端超时断开后,服务端如果没有设置超时机制,那也会继续等待处理,万一这期间有消息到了,那不是就接受到消息处理了,但是也没有办法返回到客户端,导致消息丢失。
企业级GO项目开发实战 Kubernetes权威指南 第六版
https://pan.baidu.com/s/1q3bnTncIACKoTZFxvx7BQw?pwd=ii7n
RabbitMQ精讲,项目驱动落地,分布式事务拔高 有吗?
Spring Cloud Alibaba 微服务架构实战 https://pan.baidu.com/s/1jF5voFRoeF0lYAzAPBWSbw?pwd=chqk