Mongo-重复文档的ObjectId是否不同?

时间:2019-03-05 20:59:32

标签: mongodb pymongo

因此,我试图了解如何在Mongo中创建ObjectId,然后发现this页对此进行了描述:

a 4-byte value representing the seconds since the Unix epoch,
a 5-byte random value, and
a 3-byte counter, starting with a random value.

由于时间戳,这是否意味着即使将具有相同确切内容的插入文档插入数据库也将被分配两个不同的“ ObjectId”?

即。这个?

db.Collection.insert({'field one' : 'example'} # ObjectID = X
db.Collection.insert({'field one' : 'example'} # ObjectID = Y 

1 个答案:

答案 0 :(得分:1)

插入文档的内容不会影响生成的ObjectId。即使您在一秒钟内,在一台机器上和一个进程内生成两个ObjectId,它们也必须根据3字节计数器而不同,并且从一个随机值开始。我测试了您的示例并获得了ObjectIds,仅在属于此计数器的最后一位数字上有所不同:

import pymongo
from pprint import pprint

client = pymongo.MongoClient()
db = client.db
collection = db.collection

collection.insert_one({'field one' : 'example'}) # ObjectID = X
collection.insert_one({'field one' : 'example'}) # ObjectID = Y 

pprint(list(collection.find()))

# output:
# [{'_id': ObjectId('5c7ee99688f00210d72f224e'), 'field one': 'example'},
#  {'_id': ObjectId('5c7ee99688f00210d72f224f'), 'field one': 'example'}]