Difference between "id" and "_id" fields in MongoDB
Solution 1:
I expect it's just a typo in the documentation. The _id
field is primary key for every document. It's called _id
and is also accessible via id
. Attempting to use an id
key may result in a illegal ObjectId format
error.
That section is just indicating that the automatically generated ObjectIDs start with a timestamp so it's possible to sort your documents automatically. This is pretty cool since the _id
is automatically indexed in every collection. See http://www.mongodb.org/display/DOCS/Object+IDs for more information. Specifically under "BSON ObjectID Specification".
A BSON ObjectID is a 12-byte value consisting of a 4-byte timestamp (seconds since epoch), a 3-byte machine id, a 2-byte process id, and a 3-byte counter. Note that the timestamp and counter fields must be stored big endian unlike the rest of BSON.
Solution 2:
The _id
field is the default field for Bson ObjectId's and it is,by default, indexed.
_id
and id are not the same. You may also choose to add a field called id
if you want, but it will not be index unless you add an index.
It is just a typo in the docs.
Solution 3:
id is an alias for _id in mongoid.id would return the _id of the document. https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47
if the _id field is not specified an ObjectedId is generated automatically.