Разница между полями "id" и "_id" в MongoDB

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

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

ИЗМЕНИТЬ

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 4

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

Поле _id

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

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