Mongodb:维护现有_id的时间戳,但修改机器& PID

时间:2014-10-29 10:21:49

标签: mongodb pymongo

我在Mongodb中存储从API接收的数据,并且刚刚意识到数据包含_id,因此,在执行插入时,Mongodb没有创建objectid但是插入了我收到的字符串_id。

所以现在,我想从字符串_id转换为objectid。这样做的最佳策略是什么?

  1. new_oid = ObjectId(string_id) - 维护时间戳,但机器ID&在string_id中编码的pid将与我的服务器&存储数据的pid
  2. new_oid = ObjectId() - 时间戳丢失,但机器ID&在new_oid中编码的pid将与实际存储数据的服务器一致
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

new_oid = ObjectId(string_id)没问题。如果机器ID和进程ID匹配,则无关紧要。

虽然可以从ObjectIds中提取一些信息,但我不会在生产代码中依赖它。


关于时间戳

时间戳实际上并不是商业价值,而是将文件插入数据库的时间,而您想知道例如收到订单的时间。

此外ObjectId并不能保证良好的时间戳:

  

ObjectId值的顺序与生成之间的关系   时间在一秒钟内不严格。如果是多个系统,或者   单个系统上的多个进程或线程生成值,   在一秒钟内; ObjectId值不代表严格   插入顺序。客户端之间的时钟偏差也可能导致   因为客户端驱动程序生成,所以即使是值也不严格排序   ObjectId值,而不是mongod进程。

因此,我有时会在开发过程中使用ObjectId的timestamp属性作为查找最新文档的便捷方法,但并不关心它的内容。