MongoDB——》ObjectId

版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.csdn.net/weixin_43453386/article/details/84951911

一、ObjectId简介

MySQL等关系型数据库,主键都是设置成自增的。
在分布式环境下,自增主键,会产生冲突。
为此,mongodb采用了一个称之为ObjectId的类型来做主键。
在这里插入图片描述

ObjectId:12字节,16进制 ,BSON 类型字符串

字节位置 说明
4字节 文档创建时间:UNIX时间戳 ,单位秒
3字节 主机唯一标识符:机器主机名的散列值(hash值,同一台机器的hash值一致)
2字节 进程标识符:同一台机器不同的mongodb进程产生的ObjectId不冲突
3字节 由一个随机数开始的计数器生成的值

二、从ObjectId中获取时间

1.构造ObjectId

  • 执行命令
    a = new ObjectId();
  • 返回结果
    ObjectId("5c0f21fe4f644bd639fbbde7")

在这里插入图片描述

2.获取时间

  • 执行命令
    a.getTimestamp(); 或者 ObjectId("5c0f21fe4f644bd639fbbde7").getTimestamp();
  • 返回结果
    ISODate("2018-12-11T02:35:10Z")

在这里插入图片描述

三、根据时间构造ObjectId

整个过程如下:
在这里插入图片描述

1.获取时间

使用Date的字符串构造方法生成日期,
然后使用Date对象的getTime获取毫秒数,
再除以1000得到标准时间戳

  • 执行命令
    a = new Date("2018-12-11T02:35:10Z").getTime()/1000
  • 返回结果
    1544495710

在这里插入图片描述

2.时间转为16进制字符

  • 执行命令
    a = a.toString(16)
  • 返回结果
    5c0f225e

在这里插入图片描述

3.格式化16进制字符

  • 执行命令
    a = a + new Array(17).join("0")
  • 返回结果
    5c0f225e0000000000000000

在这里插入图片描述

4.字符串构造ObjectId

  • 执行命令
    b = new ObjectId(a)
  • 返回结果
    ObjectId("5c0f225e0000000000000000")

在这里插入图片描述

5.验证ObjectId中的时间

  • 执行命令
    b.getTimestamp()
  • 返回结果
    ISODate("2018-12-11T02:35:10Z")

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43453386/article/details/84951911