Разница между полями "id" и "_id" в MongoDB - PullRequest
64 голосов
/ 14 марта 2012

Есть ли разница между использованием идентификатора поля или _ID из документа MongoDB?

Я спрашиваю это, потому что я обычно использую «_id», однако я видел этот вид ({id: -1}) в документации: http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime

EDIT

Оказывается, документы были неправильными.

Ответы [ 4 ]

52 голосов
/ 14 марта 2012

Я ожидаю, что это просто опечатка в документации. Поле _id является первичным ключом для каждого документа. Он называется _id и также доступен через id. Попытка использовать клавишу id может привести к ошибке illegal ObjectId format.

В этом разделе просто указывается, что автоматически сгенерированные ObjectID начинаются с отметки времени, поэтому можно автоматически сортировать ваши документы. Это довольно круто, поскольку _id автоматически индексируется в каждой коллекции. См. http://www.mongodb.org/display/DOCS/Object+IDs для получения дополнительной информации. Специально под "Спецификацией BSON ObjectID".

BSON ObjectID - это 12-байтовое значение, состоящее из 4-байтовой метки времени (секунды с начала эпохи), 3-байтового идентификатора компьютера, 2-байтового идентификатора процесса и 3-байтового счетчика. Обратите внимание, что поля timestamp и counter должны храниться с прямым порядком байтов в отличие от остальной части BSON.

12 голосов
/ 14 марта 2012

Поле _id является полем по умолчанию для идентификаторов объектов Bson, и по умолчанию оно индексируется.

_id и идентификатор не совпадают. Вы также можете добавить поле с именем id, если хотите, но оно не будет индексироваться, если вы не добавите индекс.

Это просто опечатка в документах.

5 голосов
/ 29 августа 2016

id - это псевдоним для _id в mongoid.id, который возвращает _id документа.https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47

если поле _id не указано, ObjectedId генерируется автоматически.

2 голосов
/ 29 августа 2016

Мои два цента:

Поле _id

MongoDB назначает поле _id каждому документу и присваивает ему первичный индекс.Есть способы, с помощью которых мы можем применять и вторичные индексы.По умолчанию MongoDB создает значения для поля _id типа ObjectID.Это значение определено в спецификации BSON и структурировано следующим образом:

ObjectID (12-байтовая строка HEX) = Дата (4 байта, значение метки времени, представляющее количество секунд с начала эпохи Unix) +MAC-адрес (3 байта) + PID (2 байта) + счетчик (3 байта)

...