MongoDB根据时间排序的一种快捷方式

ObjectId
ObjectId类型很小,几乎是唯一的,能快速生成和排序。ObjectId值由12个字节组成,前4个字节是反应ObjectId创建的时间戳,特别地:

4字节的值表示从Unix纪元开始的秒数
3个字节的机器标识符
2个字节的进程id
3个字节的计数器,以一个随机值开始
MongoDB中,每个保存在集合中的文档都需要一个唯一的_id字段作为主键。如果插入的文档没有_id字段,MongoDB驱动自动为_id字段生成一个ObjectId。

通过带upsert:true选项的更新操作所插入的文档也会自动生成_id字段。

MongoDB客户端应该用唯一的ObjectId添加_id字段。把ObjectId作为_id字段有如下额外的好处:

在mongoshell中,使用ObjectId.getTimestamp()方法可以获取到ObjectId的创建时间

对一个存储ObjectId值的_id字段排序几乎等价于对创建时间排序

重要:

在1秒的时间内,ObjectId值与生成时间的没有严格的顺序,如果多个系统,或者一个系统的多个进程/线程在1秒内生成ObjectId的话。ObjectId不代表严格的插入顺序。由于客户端驱动生成ObjectId值,客户端之间的时钟偏离也会导致非严格的顺序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值