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Другие расширения