我问这个问题是因为我通常使用 "_id",但是我在文档中看到了这样的 sort({id:-1}) :http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime 编辑
结果证明文档是错误的。
我认为这只是文档中的一个笔误。 对于每个文档,_id
字段是主键。 它被称为_id
并且也可以通过id
进行访问。 尝试使用id
键可能会导致illegal ObjectId format
错误。
该部分仅指示自动生成的ObjectIDs以时间戳开头,因此可以自动排序文档。 这非常酷,因为_id
在每个集合中都自动索引。 有关更多信息,请参见http://www.mongodb.org/display/DOCS/Object+IDs,具体在“BSON ObjectID规范”下。
BSON ObjectID是一个12字节值,由4字节时间戳(自纪元以来的秒数),3字节机器ID,2字节进程ID和3字节计数器组成。 请注意,时间戳和计数器字段必须存储为大端序,不像BSON的其他部分。
_id
字段是Bson ObjectId的默认字段,并且默认情况下已经建立索引。
_id
和id不是同一个东西。如果你想要,你也可以添加一个名为id
的字段,但是它不会被索引,除非你手动添加索引。
这只是文档中的一个笔误。
在 Mongoid 中,id 是 _id 的别名。使用 id 会返回文档的 _id。https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47
如果没有指定 _id 字段,将自动生成一个 ObjectId。
我的个人看法:
MongoDB
为每个文档分配一个_id
字段,并将其作为主索引。我们可以使用多种方法应用辅助索引。默认情况下,MongoDB
为_id
字段创建了ObjectID
类型的值。这个值在BSON
规范中定义,其结构如下:
ObjectID(12字节十六进制字符串)=日期(4字节,表示自Unix纪元以来的秒数的时间戳值)+ MAC地址(3字节)+ PID(2字节)+计数器(3字节)
_id
?换句话说,我能否创建一个没有_id
字段的新文档? - Kevin Meredith_id
字段是必须的。在MongoDB中,每个存储在集合中的文档都需要一个唯一的_id
字段作为主键。如果插入的文档省略了_id
字段,MongoDB驱动程序会自动生成一个ObjectId
作为_id
字段。 - BowPark