首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MongoDB ObjectId详解及使用ObjectId构成ObjectId获取时间根据时间构造ObjectIdQ&A

按照字节顺序,一次代表: 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

3.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何使用MongoDB+Springboot实现分布式ID?

    的ObjectId 另外,在我通过爬取知乎用户id发现,知乎的用户id是32位的,初步断定知乎采用的是md5加密,然后全部转换成小写。...MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。 它的格式: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。...时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率。...这4 个字节也隐含了文档创建的时间。绝大多数客户端类库都会公开一个方法从ObjectId 获取这个信息。 接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。...MongoDB深究之ObjectId MongoDB 教程

    1.5K50

    分布式系统中生成全局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。

    1.9K80

    .NET Core MongoDB数据仓储和工作单元模式实操

    如:获取所有用户信息、获取用户分页数据、通过用户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

    74620

    MongoDB :第三章:MongoDB的数据类型与创建MongoDB数据库

    MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。 下面说明下几种重要的数据类型。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。

    92730

    MongoDB基础之BSON数据类型

    时间戳、机器ID和进程ID组合起来,提供了秒级别的唯一性。时间戳在前,意味着ObjectId大致会按照插入的顺序排序。可以将其作为索引提高效率,但不是绝对的,只是大致。...这4个字节也隐含了文档创建的时间,绝大多数驱动都会公开一个方法从ObjectId获取这个信息。...13、Timestamp(时间戳) BSON有一个MongoDB内部使用的特殊的时间戳类型,和常的日期类型没有关系。...该字段中的值反映了使用BSON时间戳值的操作时间。 注意时间戳类型只是在MongoDB内部使用。开发过程中使用的是日期类型。...数组、BinData、ObjectId、布尔、日期、时间戳、正则表达式、MaxKey(内部类型) 1、数值类型 为了进行比较,MongoDB将这些类型视为等效的,在进行比较之前,先将数字类型进行转换。

    9.4K30

    MongoDB(6)- BSON 数据类型

    可以看到,通过 $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(

    1.3K10

    MongoDB基础之BSON数据类型

    时间戳、机器ID和进程ID组合起来,提供了秒级别的唯一性。时间戳在前,意味着ObjectId大致会按照插入的顺序排序。可以将其作为索引提高效率,但不是绝对的,只是大致。...这4个字节也隐含了文档创建的时间,绝大多数驱动都会公开一个方法从ObjectId获取这个信息。...13、Timestamp(时间戳) BSON有一个MongoDB内部使用的特殊的时间戳类型,和常的日期类型没有关系。...该字段中的值反映了使用BSON时间戳值的操作时间。 注意时间戳类型只是在MongoDB内部使用。开发过程中使用的是日期类型。...数组、BinData、ObjectId、布尔、日期、时间戳、正则表达式、MaxKey(内部类型) 1、数值类型 为了进行比较,MongoDB将这些类型视为等效的,在进行比较之前,先将数字类型进行转换。

    4.2K10

    集群高并发环境下如何保证分布式唯一全局ID生成?

    第二部分占用 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的顺序性。

    27220

    MongoDB :第三章:MongoDB的数据类型与创建MongoDB数据库

    Timestamp 时间戳。记录文档修改或添加的具体时间。 Object 用于内嵌文档。 Null 用于创建空值。 Symbol 符号。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。

    1.1K10

    从根上理解MongoDB的ObjectId生成原理!

    4 字节的 timestamp timestamp 就是时间戳。...16进制转10进制 通过时间戳的转换,我们就能看清它的真面目了。最终是一个完整的日期时间格式,如下图所示。...时间戳转日期 Machine ObjectId 规范中,还描述了,有一个占 3 个字节的 Machine(机器)。...总结 现在我们来做个总结,ObjectId 的前 4 个字节时间戳,记录了文档创建的时间;接下来 3 个字节代表了所在主机的唯一标识符,确定了不同主机间产生不同的 ObjectId;后 2 个字节的进程...id,决定了在同一台机器下,不同 mongodb 进程产生不同的 ObjectId;最后通过 3 个字节的自增计数器,确保同一秒内产生 ObjectId 的唯一性。

    1.3K20

    分布式系统唯一ID生成方案汇总

    ---- 六、MongoDB的ObjectId MongoDB的ObjectId和snowflake算法类似。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。...MongoDB 从一开始就设计用来作为分布式数据库,处理多个节点是一个核心要求。使其在分片环境中要容易生成得多。其格式如下: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。...时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。这对于某些方面很有用,如将其作为索引提高效率。...这4 个字节也隐含了文档创建的时间。绝大多数客户端类库都会公开一个方法从ObjectId 获取这个信息。 接下来的3 字节是所在主机的唯一标识符。通常是机器主机名的散列值。...同一秒钟最多允许每个进程拥有2563(16 777 216)个不同的ObjectId。 实现的源码可以到MongoDB官方网站下载。

    85720

    MongoDB Document

    _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类型进行排序,首先比较最小的元素,如果相同继续比较下一个 降序排序与升序排序相反

    12210

    MongoDB数据库基础教程(二) - 数据结构类型详解

    通过下图实例,我们也可以更直观的了解Mongo中的一些概念: 数据库 一个mongodb中可以建立多个数据库。 MongoDB的默认数据库为"db",该数据库存储在data目录中。...ObjectId ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是: 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时...这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。

    1K41

    MongoDb简介

    这个键的值可以是任何类型的,默认是个 ObjectId 对象 由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间...时间戳 BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。...这个字段中的值使用BSON时间戳表示了操作时间。 BSON 时间戳类型主要用于 MongoDB 内部使用。...因为索引存在于RAM中,从索引中获取数据比通过扫描文档读取数据要快得多。...ObjectId 中存储了 4 个字节的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间: >ObjectId(""5349b4ddd2781d08c09890f4

    3.7K40

    mongodb存储的数据类型(redis存储数据类型)

    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:

    3.7K11
    领券