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]:

最新文章

  1. EntityFramework、Dapper vs 草根框架性能大比拼,数据库访问哪家强?
  2. 关于Block的简单使用
  3. 在Windows中安装NodeJS的正确姿势
  4. 使用7-zip制作自解压安装包
  5. ★Java多线程编程总结 系列 转
  6. [zz] demand require request用法辨析
  7. iOS字符串为空的判断
  8. SQL Server 收缩日志
  9. 简化LINUX的命令输入 简化linux命令
  10. Java第三周学习日记
  11. IT第二天 - JAVA环境的配置、Hello的编写
  12. 重读The C programming Lanuage 笔记二:运算符优先级
  13. css-dialog样式实现弹框蒙层全屏无需JS计算高度兼容IE7
  14. BZOJ_2134_单选错位——期望DP
  15. docker(二) windows10下安装docker
  16. typescript初入门
  17. Python中数字之间的进制转换
  18. ssh连接时提示THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED
  19. 半夜两点灵光一现想出来的一个demo
  20. 递归拼装Tree结构数据

热门文章

  1. Django—处理流程
  2. .net面试题——20190718
  3. Girls Like You--Maroon 5
  4. Pycharm Community 配置 Django 开发环境
  5. shell脚本基础编写
  6. zencart单独屏蔽左右边栏代码
  7. 性能分析之TCP全连接队列占满问题分析及优化过程(转载)
  8. python之select与selector
  9. springboot2.0入门(五)--swagger2接口API构建
  10. 数据结构实验之链表四:有序链表的归并(SDUT 2119)