zoukankan      html  css  js  c++  java
  • ObjectId初探

    ObjectId

    MongoDB每个集合存储的每个文档必须有一个"_id"键,默认是个ObjectId对象。

    "_id"作为当前文档在集合的唯一标识。

    71standby:PRIMARY> db.accesslog.find({},{_id:1}).pretty()
    { "_id" : ObjectId("5d1d7225d06339b452d964f6") }
    { "_id" : ObjectId("5d1d7225d06339b452d964f7") }
    { "_id" : ObjectId("5d1d7225d06339b452d964f8") }
    { "_id" : ObjectId("5d1d7226d06339b452d964fa") }
    { "_id" : ObjectId("5d1d7226d06339b452d964fb") }
    { "_id" : ObjectId("5d1d7226d06339b452d964fc") }
    { "_id" : ObjectId("5d1d72acd06339b452d964fe") }
    { "_id" : ObjectId("5d1d72acd06339b452d964ff") }
    { "_id" : ObjectId("5d1d72acd06339b452d96500") }
    71standby:PRIMARY> 
    

    ObjectId是有12字节组成的,其前面4字节表示的是文档创建的时间戳(比北京时间晚了 8 个小时)

    在 mongo shell 里可以通过 ObjectId.getTimestamp() 来查看文档创建时间。

    71standby:PRIMARY> x = ObjectId()
    ObjectId("5d9ea85b7444a82a869f958f")
    71standby:PRIMARY> x
    ObjectId("5d9ea85b7444a82a869f958f")
    71standby:PRIMARY> x.getTimestamp()
    ISODate("2019-10-10T03:41:15Z")
    tvos-mediacenter-rs1:PRIMARY> 

    时间转换

    以 "5d9ea85b7444a82a869f958f" 为例:

    # 1字节等于8bit,而一个十六进制数可以由4bit表示,所以两个十六进制数可以表示一个字节

    # 所以前4个字节则是前面8个16进制数。

    In [25]: import time                                                                                                                                                                                                                      
    
    In [26]: key = '5d9ea85b7444a82a869f958f'                                                                                                                                                                                                 
    
    In [27]: ts = int(key[:8],16)       # 16进制转10进制                                                                                                                                                                                                      
    
    In [28]: ts                                                                                                                                                                                                                               
    Out[28]: 1570678875
    
    In [29]: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))                                                                                                                                                                           
    Out[29]: '2019-10-10 11:41:15'      # 比UTC时间早8个小时
    
    In [30]: hex(ts)                    # 10进制转16进制                                                                                                                                                                                                      
    Out[30]: '0x5d9ea85b'
    
    In [31]: 
    
    In [32]: 11*16**0 + 5*16**1 + 8*16**2 + 10*16**3 + 14*16**4 + 9*16**5 + 13*16**6 + 5*16**7 
    Out[32]: 1570678875
    
    In [33]:

    Convert BSON to JSON

    In [13]: doc                                                                                                                                                                                                                              
    Out[13]: 
    {'_id': ObjectId('54d9a762ab4f16f448312863'),
     'artist': '后街男孩',
     'cover': 'http://img5.douban.com/lpic/s2512539.jpg',
     'song': 'Everbody'}
    
    In [14]: import json                                                                                                                                                                                                                      
    
    In [15]: from bson.json_util import dumps                                                                                                                                                                                                 
    
    In [16]: dumps(doc)                                                                                                                                                                                                                       
    Out[16]: '{"_id": {"$oid": "54d9a762ab4f16f448312863"}, "artist": "\u540e\u8857\u7537\u5b69", "cover": "http://img5.douban.com/lpic/s2512539.jpg", "song": "Everbody"}'
    
    In [17]: json.loads(dumps(doc))                                                                                                                                                                                                           
    Out[17]: 
    {'_id': {'$oid': '54d9a762ab4f16f448312863'},
     'artist': '后街男孩',
     'cover': 'http://img5.douban.com/lpic/s2512539.jpg',
     'song': 'Everbody'}
    
    In [18]: 
  • 相关阅读:
    java 8
    内存溢出VS内存泄漏
    dubbo zk 分布式服务项目搭建与配置
    转发 VS 重定向
    过滤器
    Synchronized
    java 泛型
    spring 整合 mongo
    泛型
    反虚拟机
  • 原文地址:https://www.cnblogs.com/standby/p/11647158.html
Copyright © 2011-2022 走看看