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

83
4个回答

67

我认为这只是文档中的一个笔误。 对于每个文档,_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的其他部分。


8
在一个集合中,每个文档是否都必须有 _id?换句话说,我能否创建一个没有 _id 字段的新文档? - Kevin Meredith
5
根据这里的规定,是的,_id字段是必须的。在MongoDB中,每个存储在集合中的文档都需要一个唯一的_id字段作为主键。如果插入的文档省略了_id字段,MongoDB驱动程序会自动生成一个ObjectId作为_id字段。 - BowPark

15

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

_id和id不是同一个东西。如果你想要,你也可以添加一个名为id的字段,但是它不会被索引,除非你手动添加索引。

这只是文档中的一个笔误。


8

5

我的个人看法:

_id字段

MongoDB为每个文档分配一个_id字段,并将其作为主索引。我们可以使用多种方法应用辅助索引。默认情况下,MongoDB_id字段创建了ObjectID类型的值。这个值在BSON规范中定义,其结构如下:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接