使用MongoDB文档中的字段ID或_ID有什么区别吗?
我问这个,因为我通常使用“_id”,但是我在文档中看到了这种类型({id:-1}):http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime
修改
原来这些文档错了。
答案 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)
我的两分钱:
MongoDB
为每个文档分配一个_id
字段,并为其分配主索引。我们还可以通过这种方式应用二级指数。默认情况下,MongoDB
会为_id
类型的ObjectID
字段创建值。此值在BSON
规范中定义,并且以这种方式构建:
ObjectID(12字节HEX字符串)=日期(4字节,表示自Unix纪元以来的秒数的时间戳值)+ MAC地址(3字节)+ PID(2字节)+计数器(3字节)