MongoDB ObjectId


В предыдущих главах мы уже использовали ObjectId из MongoDB.

В этой главе мы изучим структуру ObjectId.

ObjectId — это 12-байтовые данные типа BSON со следующим форматом:

  • Первые 4 байта представляют собой временную метку
  • Следующие 3 байта — это код идентификатора машины
  • Следующие два байта состоят из идентификатора процесса (PID)
  • Последние три байта — это случайное число.

Документы, хранящиеся в MongoDB, должны иметь ключ "_id". Значение этого ключа может быть любого типа, и по умолчанию оно является объектом ObjectId.

Внутри коллекции каждый документ имеет уникальное значение "_id", что гарантирует, что каждый документ в коллекции может быть однозначно идентифицирован.

Основная причина, по которой MongoDB использует ObjectId вместо других традиционных подходов (таких как автоинкрементные первичные ключи), заключается в том, что синхронизация значений автоинкрементных первичных ключей между несколькими серверами является трудоемкой и отнимает много времени.


Создать новый ObjectId

Используйте следующий код, чтобы сгенерировать новый ObjectId:

>newObjectId = ObjectId()

Приведённая выше инструкция возвращает следующий уникально сгенерированный идентификатор:

ObjectId("5349b4ddd2781d08c09890f3")

Вы также можете использовать сгенерированный идентификатор, чтобы заменить ObjectId, автоматически сгенерированный MongoDB:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

Метка времени создания документа

Поскольку ObjectId хранит 4-байтовую метку времени, вам не нужно сохранять поле метки времени для ваших документов. Вы можете использовать функцию getTimestamp, чтобы получить время создания документа:

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

Приведённый выше код вернёт время создания документа в формате ISO:

ISODate("2014-04-12T21:49:17Z")

Преобразование ObjectId в строку

В некоторых случаях вам может понадобиться преобразовать ObjectId в строковый формат. Вы можете использовать следующий код:

>new ObjectId().str

Приведённый выше код вернёт строку в формате Guid:

5349b4ddd2781d08c09890f3
Другие расширения