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

Art*_*ves 66 mongodb mongoid

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

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

编辑

事实证明文件是错误的.

小智 55

我希望它只是文档中的一个错字.该_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存储.

  • 对于集合的每个文档,"_id"是强制性的吗?换句话说,我可以创建一个没有`_id`字段的新文档吗? (7认同)
  • @KevinMeredith正如[here](https://docs.mongodb.com/manual/reference/bson-types/#objectid)所述,是的,`_id`字段是必填字段.«在MongoDB中,存储在集合中的每个文档都需要一个唯一的`_id`字段作为主键.如果插入的文档省略了`_id`字段,MongoDB驱动程序会自动为`_id`字段生成`ObjectId`. (4认同)

Bry*_*isi 13

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

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

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


tes*_*sie 5

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

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


xam*_*mir 5

我的两分钱:

_id 字段

MongoDB为每个文档分配一个_id字段并为其分配主索引。我们也可以通过多种方式应用二级索引。默认情况下,为类型字段MongoDB创建值。该值在规范中定义,其结构如下:_idObjectIDBSON

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