MongoDB _id和ObjectId详解

2016-06-15|来源:

在创建一个文档的时候,会生成一个_id,id的默认类型是ObjectId,如:
> db.blog.findOne()
{
   "_id" : ObjectId("5755448bfceaa7879cd4d48f"),
   "title" : "领悟书生",
   "content" : "这是一个分享教程的网站",
   "date" : ISODate("2016-06-06T09:38:08.995Z")
}


ObjectId的生成规则

   4字节:UNIX时间戳
   3字节: 这三个字节是所在主机的唯一标识符,一般是机器主机名的散列值,这样就确保了不同主机生成不同的机器hash值,确保在分布式中不造成冲突,这也就是在同一台机器生成的objectid中间的字符串都是一模一样的原因
   2字节:表示生成此_id的进程,确保 同一台机器不同的mongodb进程产生了objectid不冲突

   3字节:由一个随机数开始的计数器生成的值,确保在同一秒内产生的objectid也不会出现冲突



相关问答

更多

mongodb的id的数据类型怎么写objectid

1、前4个字节(即前八位字符串)是一个UNIX时间戳,精确到秒,实际上隐藏了文档创建的时间(将其换算成十进制,再格式化一下即可发现) 2、接下来的3个字节,是所在主机的唯一标识符,一般是机器主机名的散列值,这样就确保了不同主机生成不同的机器hash值,在分布式中不造成冲突,这也就是在同一台机器生成的ObjectId中间的字符串都是一模一样的原因 3、这两个字节PID是为了在同一台机器不同的mongodb进程产生的ObjectId不冲突,即进程标识符 4、前面的字节保证了一秒内不同机器不同进程生成的 ...

Mysql迁移数据到Mongodb,原自增类型的id要转换成objectId,有没有什么好的迁移方法或建议

这样: ObjectId id = new ObjectId(new Date(), old_id&0xffff, old_id&0xffff0000); 使用的这个构造函数 ObjectId( Date time , int machine , int inc ); 把你原来的64位的id值得高32位转换为ObjectId中的machine值,低32位转换为ObjectId中的inc。 这样就可以满足你的需求了。

mongodb中ObjectId和ObjectId.toString查询有什么区别

mongodb中ObjectId和ObjectId.toString查询有什么区别 urlencode() 返回一个请求字符串格式的数据字符串 (如, "a=2&b=3&b=5" )。 一个完整的例子 例如, 给定这个HTML表单: The Beatles The Who The Zombies 如果用户在 your_name 中输入 "John Smith" ,并且在多选框中同时选择了The Beatles和The Zombies,那么以下就是Django的request对象所拥有的:

mongodb学习资料和视频

可以买本《MongoDB权威指南》,这是目前仅有的比较好的翻译成中文的mongodb教程了。 至于驱动,可以去www.mongodb.org上找到。mongodb支持很多种语言的驱动程序,但是文档都是英文的,需要你有一定的英文阅读能力,因为使用驱动的过程中肯定会遇到很多问题,不查文档肯定抓瞎了。

mongodb学习资料和视频

可以买本《MongoDB权威指南》,这是目前仅有的比较好的翻译成中文的mongodb教程了。 至于驱动,可以去www.mongodb.org上找到。mongodb支持很多种语言的驱动程序,但是文档都是英文的,需要你有一定的英文阅读能力,因为使用驱动的过程中肯定会遇到很多问题,不查文档肯定抓瞎了。

专题教程

相关文章

更多

最近更新

更多