按照字节顺序,一次代表: 4字节:UNIX时间戳 3字节:表示运行MongoDB的机器 2字节:表示生成此_id的进程 3字节:由一个随机数开始的计数器生成的值 ObjectId获取时间 从ObjectId...我们肯定可以从中获取时间信息:即插入此文档时的时间。MongoDB对ObjectId对象提供了getTimestamp()方法来获取ObjectId的时间。...") 根据时间构造ObjectId 上例是直接使用MongoDB提供的新建方法来构造ObjectId的,我们自己可不可以通过字符串来构造呢?...看下例: // 使用Date的字符串构造方法生成日期,然后使用Date对象的getTime获取毫秒数,再除以1000得到标准时间戳 > a = new Date("2012-12-12 00:00:00...").getTime()/1000 1355241600 // 获取时间戳的标准十六进制表示 > a = a.toString(16) 50c75880 // 在后面填补16个0 > a
取走直接用,当个 demo 挺好的。 #include <iostream> #include <time.h> #include <unistd.h> usi...
AMD MicroBlaze中通过AXI Timer获取时间戳 硬件的Vivado Block design设计中,添加AXI Timer 包含AXI Timer的头文件 #include...TMRCTR_DEVICE_ID, TIMER_COUNTER_0); 其中TmrCtrPolledInit()来自于xtmrctr_polled_example.c中的TmrCtrPolledExample(),可以在BSP中从AXI...通过XTmrCtr_GetValue获取时间戳 通过XTmrCtr_GetValue获取时间戳,是以时钟周期为单位的。可以转化成微妙、毫秒、秒等单位。
的ObjectId 另外,在我通过爬取知乎用户id发现,知乎的用户id是32位的,初步断定知乎采用的是md5加密,然后全部转换成小写。...MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。 它的格式: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。...时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率。...这4 个字节也隐含了文档创建的时间。绝大多数客户端类库都会公开一个方法从ObjectId 获取这个信息。 接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。...MongoDB深究之ObjectId MongoDB 教程
一、ObjectId的组成 首先通过终端命令行,向mongodb的collection中插入一条不带“_id”的记录。...ObjectId的官方规范 1)Time 时间戳。将刚才生成的objectid的前4位进行提取“5e4fa350”,然后按照十六进制转为十进制,变为“1582277456”,这个数字就是一个时间戳。...通过时间戳的转换,就成了易看清的时间格式2020-02-21 17:30:56, 2)Machine 机器。...,不同mongodb进程产生不同的objectId;最后通过3个是自增计数器,确保同一秒内产生objectId的唯一性。...ObjectId的这个主键生成策略,很好地解决了在分布式环境下高并发情况主键唯一性问题,值得学习借鉴 php插入mongodb获取id和列取id的方法 <?
在mongo.exe中,通过ObjectId.getTimestamp可以获取时间信息 mongos> x = ObjectId() ObjectId("59cf6033858d9d5a85caac02...从代码可以看出两个问题:第一,即使在同一个机器同一个进程,也是可能产生相同的ObjectID的,因为_inc简单自增,且每次都直接通过time.time获取时间。...第二,如果生成的机器标识相同,那么大大增加了产生相同ObjectId的概率。 与之对比,SnowFlake有对象的解决办法: 第一:生成ID的时候,获取并记录当前的时间戳。...如果当前时间戳与上一次记录的时间戳相同,那么将计数器加一,如果计数器已满,那么会等到下一毫秒才会生成ID。如果当前时间戳大于上一次记录的时间戳,那么随机初始化计数器,并生成ID。...当需要根据文件名获取文件内容的时候,TFS的客户端,首先通过文件名解析出Block id与File id,然后从NameServer上根据Block id查询block所在的DataServer。
如:获取所有用户信息、获取用户分页数据、通过用户ID获取对应用户信息、添加用户信息、事务添加用户信息、用户信息修改、用户信息删除等实战教程。...MongoDB从入门到实战的相关教程 MongoDB从入门到实战之MongoDB简介 MongoDB从入门到实战之MongoDB快速入门 MongoDB从入门到实战之Docker快速安装MongoDB...MongoDB从入门到实战之MongoDB工作常用操作命令 MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建 MongoDB从入门到实战之...ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程...MongoDB 采用 ObjectId 来表示主键的类型,数据库中每个文档都拥有一个_id 字段表示主键,_id 的生成规则如下: 其中包括4-byte Unix 时间戳,3-byte 机器 ID,2
MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。 下面说明下几种重要的数据类型。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。
时间戳、机器ID和进程ID组合起来,提供了秒级别的唯一性。时间戳在前,意味着ObjectId大致会按照插入的顺序排序。可以将其作为索引提高效率,但不是绝对的,只是大致。...这4个字节也隐含了文档创建的时间,绝大多数驱动都会公开一个方法从ObjectId获取这个信息。...13、Timestamp(时间戳) BSON有一个MongoDB内部使用的特殊的时间戳类型,和常的日期类型没有关系。...该字段中的值反映了使用BSON时间戳值的操作时间。 注意时间戳类型只是在MongoDB内部使用。开发过程中使用的是日期类型。...数组、BinData、ObjectId、布尔、日期、时间戳、正则表达式、MaxKey(内部类型) 1、数值类型 为了进行比较,MongoDB将这些类型视为等效的,在进行比较之前,先将数字类型进行转换。
可以看到,通过 $type 来指定数据类型的时候,可以用别名,也可以用序号 ObjectId ObjectId 很小,可能是唯一的,生成速度快,并且有序,ObjectId 值的长度为 12 个字节,包括...一个 4 字节的时间戳值,代表 ObjectId 的创建,以 Unix 纪元以来的秒数为单位 一个 5 字节的随机值 一个 3 字节递增计数器,初始化为随机值 给 _id 添加一个 ObjectId...字符串是UTF-8 在序列化和反序列化 BSON 时,每种编程语言的驱动程序都会从该语言的字符串格式转换为 UTF-8 这使得在 BSON 字符串可以轻松存储大多数国际字 此外,MongoDB $regex...查询在 regex 字符串中支持 UTF-8 Timestamps BSON 有一个特殊的时间戳类型供内部 MongoDB 使用,并且与常规 Date 类型无关 此内部时间戳类型是一个 64 位值 前...,MongoDB将用当前时间戳值替换空时间戳值 db.myNewCollection1.insert({test:new timestamp()}) db.myNewCollection1.find(
第二部分占用 41 个 bit,记录时间戳。由于使用毫秒级别时间戳,可以满足 69 年内的需求。 第三部分占用 10 个 bit,机器节点编号。可通过配置文件或由服务注册中心动态生成。...Snowflake 的主要思路就是将一个 64 位的整数分为三个部分:时间戳、机器标识和序列号。各部分的位数如下: 时间戳占用 41 位,精确到毫秒级别,可以使用到大约 69 年。...MongoDB objectId 算法 MongoDB objectId 算法是 MongoDB 数据库生成的一种 ID 生成算法。...时间:ObjectId 中包含了一个 4 字节 Unix 的时间戳,精确到秒级 机器标识:一个 ObjectId 中有三个字节用来记录机器标识,可以将机器 IP 地址进行 hash 算法得出 随机数:剩余的...9 个字节之和 4 个时间字节和3个机器标识的字节一起组合起来生成,用于避免碰撞情况 mongoDB objectId 算法采用了一种随机方式,同时采用基于时间的策略保证ID的顺序性。
Timestamp 时间戳。记录文档修改或添加的具体时间。 Object 用于内嵌文档。 Null 用于创建空值。 Symbol 符号。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。
4 字节的 timestamp timestamp 就是时间戳。...16进制转10进制 通过时间戳的转换,我们就能看清它的真面目了。最终是一个完整的日期时间格式,如下图所示。...时间戳转日期 Machine ObjectId 规范中,还描述了,有一个占 3 个字节的 Machine(机器)。...总结 现在我们来做个总结,ObjectId 的前 4 个字节时间戳,记录了文档创建的时间;接下来 3 个字节代表了所在主机的唯一标识符,确定了不同主机间产生不同的 ObjectId;后 2 个字节的进程...id,决定了在同一台机器下,不同 mongodb 进程产生不同的 ObjectId;最后通过 3 个字节的自增计数器,确保同一秒内产生 ObjectId 的唯一性。
---- 六、MongoDB的ObjectId MongoDB的ObjectId和snowflake算法类似。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。...MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。其格式如下: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。...时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率。...这4 个字节也隐含了文档创建的时间。绝大多数客户端类库都会公开一个方法从ObjectId 获取这个信息。 接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。...同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。 实现的源码可以到MongoDB官方网站下载。
MongoDB 中 _id 的生成 mongodb 采用了一个称之为 ObjectId 的类型来做主键,ObjectId 是一个12字节的 BSON 类型字符串,如下图所示。...与此同时,在 _id 中已经保存了时间信息,让我们可以轻易的获取到文档首次插入的时间: > objid = new ObjectId() > ObjectId("53102b43bf1044ed8b0ba36b...") > objid.getTimestamp() > ISODate("2014-02-28T06:22:59Z") 而另一方面,由于时间戳信息被保存在前 3 个字节中,这使得默认排序下,文档数据可以很容易按照插入顺序排序...获取自增 id 通过下面的命令就可以获取自增 ID 了。...通过 php 生成 MongoDB 自增 id <?
_id Field MongoDB中,每一个Document必须要存储一个唯一的_id作为主键,如果代码中没有写入这个值,MongoDB会自动生成一个ObjectId进行写入。...,快速生成且有序的特点,长度为12个字节,主要由以下三部分组成: 4字节的timestamp,Unix秒时间戳,采用大端序存储,不同于BSON Value 5字节的由进程生成的随机值,同一台机器同一个进程该随机值是一样的...Timstamp 在MongoDB内部,BSON的timestamp与常规的Date类型有所不同,它由64bit表示: 最高的32bit是Unix的时间戳time_t,单位为秒 最低的32bits是一个自增的序列号...Date BSON中的Date存储采用64bit的整数来表示,存储的值为Unix时间戳,单位为毫秒。...,false:默认值,从字符串的开头开始比较,true:从字符串的末尾开始比较 Array比较 升序排序时会依据BSON类型进行排序,首先比较最小的元素,如果相同继续比较下一个 降序排序与升序排序相反
通过下图实例,我们也可以更直观的了解Mongo中的一些概念: 数据库 一个mongodb中可以建立多个数据库。 MongoDB的默认数据库为"db",该数据库存储在data目录中。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。
这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。...因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。...ObjectId 中存储了 4 个字节的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间: >ObjectId(""5349b4ddd2781d08c09890f4
object > Date() Sun Mar 04 2018 15:02:59 GMT+0000 (UTC) 2.时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的...时间戳值是一个 64 位的值。其中: 前32位是一个 time_t 值(与Unix新纪元相差的秒数) 后32位是在某秒中操作的一个递增的序数 在单个 mongod 实例中,时间戳值通常是唯一的。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。...4.ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8...由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间: 发布者:全栈程序员栈长,转载请注明出处:https:
领取专属 10元无门槛券
手把手带您无忧上云