Advertisement

将时间戳(timestamp)转换为MongoDB中的ObjectId

阅读量:

文章目录

以下是按照要求进行的同义改写

什么是ObjectId

ObjectId是MongoDB文档所设定的预设主键,在插入新文档时一般会将其放置在_id字段中。举个例子来说

复制代码
    {
    "_id": ObjectId("507f1f77bcf86cd799439011")
    }

ObjectId是一个12字节的二进制BSON类型字符串, 由以下几部分构成:

  • 1-4字节: UNIX timestamp
    • 5-7字节: 硬件设备标识用于运行MongoDB
    • 8-9字节: 表示创建此唯一标识符的过程
    • 10-12字节: 基于一个随机数值作为起点产生的计数值序列中的一个值
ObjectId的构造方法

构造器ObjectId()接受的参数可以是:

  • 不提供参数
复制代码
    var ObjectId = require('mongodb').ObjectID
    var id = new ObjectId();
  • 12字节的字符串
复制代码
    var ObjectId = require('mongodb').ObjectID
    var id = new ObjectId("aaaabbbbcccc");
  • 24字节的16进制字符表示
复制代码
    var ObjectId = require('mongodb').ObjectID
    var id = new ObjectId("507f1f77bcf86cd799439011");
ObjectId实例方法

ObjectId常用的实例方法有:

  • getTimestamp()
复制代码
    var ObjectId = require('mongodb').ObjectID
    var id = new ObjectId();
    console.log(id.getTimestamp())
  • toHexString()
复制代码
    var ObjectId = require('mongodb').ObjectID
    var id = new ObjectId("aaaabbbbcccc");
    console.log(id.toHexString())
ObjectId与Timestamp的转换

以下介绍几种语言中将日期转换为ObjectId的方法

shell
复制代码
    curr_dt='2019-02-25'
    curr_ts='$(printf '%x' $(date -d "$curr_dt" +%s))'
    curr_oid=$(printf '%-24s' ${curr_ts} |sed 's/ /0/g')
python
复制代码
    from dateutil.parser import parse
    from bson import ObjectId
    import time
    curr_dt = parse('2019-02-25')
    curr_oid = ObjectId(hex(int(time.mktime(curr_dt.timetuple())))[2:] + '0'*16)
javascript
复制代码
    curr_dt=new Date()
    curr_oid = Math.floor(curr_dt.getTime() / 1000).toString(16) + "0000000000000000";

除此之前,也可以访问在线转换器

全部评论 (0)

还没有任何评论哟~