Mongo. Отличаются ли идентификаторы ObjectId дубликатов документов?

Итак, я пытался понять, как создаются 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.

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

т.е. это?

db.Collection.insert({'field one' : 'example'} # ObjectID = X
db.Collection.insert({'field one' : 'example'} # ObjectID = Y 
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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'}]

Другие вопросы по теме