zoukankan      html  css  js  c++  java
  • 将时间戳(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";
    

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

  • 相关阅读:
    [转]zookeeper-端口说明
    ACM-ICPC(9/26)
    ACM-ICPC(9/25)
    Linux的文件权限与目录配置
    Uva 11468 AC自动机或运算
    Uva 11922 Splay
    HDU 6214 最小割边
    Uva 10559 消除方块
    HDU 6194 后缀数组
    Uva 11491 暴力贪心
  • 原文地址:https://www.cnblogs.com/lestatzhang/p/10611327.html
Copyright © 2011-2022 走看看