將時間戳(timestamp)轉換為MongoDB中的ObjectId


什么是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";

除此之前,也可以訪問在線轉換器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM