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


Answers:


60

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

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

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


7
_id馆藏的每个文件都是必需的吗?换句话说,我可以创建没有该_id字段的新文档吗?
凯文·梅雷迪斯

4
@KevinMeredith作为指定在这里,是的,一个_id字段是强制性的。«在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id字段作为主键。如果插入的文档忽略该_id字段,则MongoDB驱动程序会自动ObjectId为该_id字段生成一个»。
BowPark '17

15

_id字段是Bson ObjectId的默认字段,并且默认情况下已建立索引。

_id和ID不相同。您还可以根据需要选择添加一个名为的字段id,但是除非您添加索引,否则它不会成为索引。

这只是文档中的错字。



4

我的两分钱:

_id字段

MongoDB_id每个文档分配一个字段,并为其分配主索引。还有一些方法可以应用二级索引。默认情况下,为类型MongoDB_id字段创建值ObjectID。此值在BSONspec中定义,并且采用以下方式构造:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.