MongoDB中“id”和“_id”字段之间的区别

时间:2012-03-14 00:51:02

标签: mongodb mongoid

使用MongoDB文档中的字段ID或_ID有什么区别吗?

我问这个,因为我通常使用“_id”,但是我在文档中看到了这种类型({id:-1}):http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime

修改

原来这些文档错了。

4 个答案:

答案 0 :(得分:52)

我希望它只是文档中的错字。 _id字段是每个文档的主键。它名为_id,也可以通过id访问。尝试使用id密钥可能会导致illegal ObjectId format错误。

该部分仅表示自动生成的ObjectID以时间戳开头,因此可以自动对文档进行排序。这非常酷,因为_id会在每个集合中自动编入索引。有关详细信息,请参阅http://www.mongodb.org/display/DOCS/Object+IDs。具体在“BSON ObjectID规范”下。

  

BSON ObjectID是一个12字节的值,由4字节时间戳(自纪元以来的秒数),3字节机器ID,2字节进程ID和3字节计数器组成。请注意,与BSON的其余部分不同,时间戳和计数器字段必须以big endian存储。

答案 1 :(得分:12)

_id字段是Bson ObjectId的默认字段,默认情况下,它是索引的。

_id和id不一样。如果需要,您也可以选择添加一个名为id的字段,但除非您添加索引,否则它不会是索引。

这只是文档中的一个错字。

答案 2 :(得分:5)

id是mongoid.id中_id的别名,它将返回文档的_id。 https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47

如果未指定_id字段,则会自动生成ObjectedId。

答案 3 :(得分:2)

我的两分钱:

_id字段

MongoDB为每个文档分配一个_id字段,并为其分配主索引。我们还可以通过这种方式应用二级指数。默认情况下,MongoDB会为_id类型的ObjectID字段创建值。此值在BSON规范中定义,并且以这种方式构建:

  

ObjectID(12字节HEX字符串)=日期(4字节,表示自Unix纪元以来的秒数的时间戳值)+ MAC地址(3字节)+ PID(2字节)+计数器(3字节)