MongoDB——》ObjectId 柔情只为你懂 2024-02-19 14:32 33阅读 0赞 版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。 [https://blog.csdn.net/weixin\_43453386/article/details/84951911][https_blog.csdn.net_weixin_43453386_article_details_84951911] #### MongoDB——》ObjectId #### * 一、ObjectId简介 * 二、从ObjectId中获取时间 * * 1.构造ObjectId * 2.获取时间 * 三、根据时间构造ObjectId * * 1.获取时间 * 2.时间转为16进制字符 * 3.格式化16进制字符 * 4.字符串构造ObjectId * 5.验证ObjectId中的时间 ## 一、ObjectId简介 ## > MySQL等关系型数据库,主键都是设置成自增的。 > 在分布式环境下,自增主键,会产生冲突。 > 为此,mongodb采用了一个称之为ObjectId的类型来做主键。 > ![在这里插入图片描述][20181211102409339.png] ObjectId:12字节,16进制 ,BSON 类型字符串 <table> <thead> <tr> <th>字节位置</th> <th align="left">说明</th> </tr> </thead> <tbody> <tr> <td>4字节</td> <td align="left">文档创建时间:UNIX时间戳 ,单位秒</td> </tr> <tr> <td>3字节</td> <td align="left">主机唯一标识符:机器主机名的散列值(hash值,同一台机器的hash值一致)</td> </tr> <tr> <td>2字节</td> <td align="left">进程标识符:同一台机器不同的mongodb进程产生的ObjectId不冲突</td> </tr> <tr> <td>3字节</td> <td align="left">由一个随机数开始的计数器生成的值</td> </tr> </tbody> </table> ## 二、从ObjectId中获取时间 ## ### 1.构造ObjectId ### * 执行命令 `a = new ObjectId();` * 返回结果 `ObjectId("5c0f21fe4f644bd639fbbde7")` ![在这里插入图片描述][20181211103526854.png] ### 2.获取时间 ### * 执行命令 `a.getTimestamp();` 或者 `ObjectId("5c0f21fe4f644bd639fbbde7").getTimestamp();` * 返回结果 `ISODate("2018-12-11T02:35:10Z")` ![在这里插入图片描述][20181211103745171.png] ## 三、根据时间构造ObjectId ## 整个过程如下: ![在这里插入图片描述][20181211110548518.png] ### 1.获取时间 ### > 使用Date的字符串构造方法生成日期, > 然后使用Date对象的getTime获取毫秒数, > 再除以1000得到标准时间戳 * 执行命令 `a = new Date("2018-12-11T02:35:10Z").getTime()/1000` * 返回结果 `1544495710` ![在这里插入图片描述][20181211110129510.png] ### 2.时间转为16进制字符 ### * 执行命令 `a = a.toString(16)` * 返回结果 `5c0f225e` ![在这里插入图片描述][2018121111021316.png] ### 3.格式化16进制字符 ### * 执行命令 `a = a + new Array(17).join("0")` * 返回结果 `5c0f225e0000000000000000` ![在这里插入图片描述][20181211110326152.png] ### 4.字符串构造ObjectId ### * 执行命令 `b = new ObjectId(a)` * 返回结果 `ObjectId("5c0f225e0000000000000000")` ![在这里插入图片描述][20181211110326152.png] ### 5.验证ObjectId中的时间 ### * 执行命令 `b.getTimestamp()` * 返回结果 `ISODate("2018-12-11T02:35:10Z")` ![在这里插入图片描述][20181211110526928.png] [https_blog.csdn.net_weixin_43453386_article_details_84951911]: https://blog.csdn.net/weixin_43453386/article/details/84951911 [20181211102409339.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/34ad79336f85409db1c70fac5e92595a.png [20181211103526854.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/25ac2559a14040d8a1e805debae52c14.png [20181211103745171.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/6c8cf0a80a664b15a3a9c6743dc4447f.png [20181211110548518.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/b8165c019d3f42a09c767b07bc4fa456.png [20181211110129510.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/6aee80485d6946fb9c6dbb64aae361d9.png [2018121111021316.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/11731a5f3cde40d0955cf69693c7646d.png [20181211110326152.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/e8d195d97a1749ac9579356cdad14fa1.png [20181211110526928.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/01/29/4167f674348a422d9987b3ee165671fb.png
还没有评论,来说两句吧...