Монго - Отличаются ли ObjectId дубликатов документов? - PullRequest
0 голосов
/ 05 марта 2019

Итак, я пытался понять, как создаются ObjectId в Mongo, и нашел эту страницу, описывающую это:

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.

Из-за временных отметок означает ли это, что дажевставленные документы с одинаковым точным содержимым в базу данных получат два разных ObjectIds?

т.е.этот?

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

1 Ответ

1 голос
/ 06 марта 2019

Содержимое вставленного документа не влияет на сгенерированный 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'}]
...