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]: 
  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/standby/p/11647158.html
Copyright © 2011-2022 走看看