MongoDB ObjectId

  1. 云栖社区>
  2. 博客>
  3. 正文

MongoDB ObjectId

技术mix呢 2017-10-31 12:43:00 浏览535
展开阅读全文

阅读目录

回到顶部

概述

复制代码
> db.col.find()
{ "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : 1, "y" : 3 }
{ "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : 2, "y" : 2 }
{ "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : 3, "y" : 1 }
{ "_id" : ObjectId("56c5a7beb708aa3d13c61cc7"), "c" : 3, "m" : 1 }
复制代码

每个文档中都有一个“_id”,她是一个12字节的BSON类型数据,格式如下

56c56dd4ca446fab71e4c38a
  • 前4个字节表示时间戳
  • 接下来的3个字节是机器标识码
  • 紧接的两个字节由进程id组成(PID)
  • 最后三个字节是随机数

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

文档的“_id”是唯一的,以确保集合中的文档被唯一标识。

MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。(不同机器可以通过机器名区分,同一个机器通过时间戳、随机数、进程id区分)

回到顶部

创建新的ObjectId

> newObjectId_1 = ObjectId()
ObjectId("56c686d264799370c0ef357b")
> newObjectId_2 = ObjectId()
ObjectId("56c686d364799370c0ef357c")

可以用已经生成的id取代自动生成的ObjectId

d = ObjectId("56c686d364799370c0ef357c")
ObjectId("56c686d364799370c0ef357c")
回到顶部

获取文档的时间戳

由于ObjectId的前4位是时间戳,因此不需要为文档特意的保存时间戳,可以用getTimestamp()获取

> ObjectId("56c56dd4ca446fab71e4c38a").getTimestamp()
ISODate("2016-02-18T07:08:04Z")
回到顶部

ObjectId转化为时间戳

> new ObjectId().str
56c68c3b64799370c0ef3581
> ObjectId("56c56dd4ca446fab71e4c38a").str
56c56dd4ca446fab71e4c38a

 




本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/5200399.html,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术mix呢
+ 关注