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")

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值