什么是ObjectId
ObjectId是MongoDB文档的默认主键,通常位于插入文档的_id字段中。例如:
{
"_id": ObjectId("507f1f77bcf86cd799439011")
}
ObjectId是一个12字节的二进制BSON类型字符串, 由以下几部分构成:
- 1-4字节:UNIX时间戳
- 5-7字节:表示运行MongoDB的机器
- 8-9字节:表示生成此_id的进程
- 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";
除此之前,也可以访问在线转换器
来源:oschina
链接:https://my.oschina.net/u/4362845/blog/3636461