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

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

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

剪辑

结果证明那些文件是错的。

91339 次浏览

我想这只是文档中的一个打印错误。_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字段是 Bson ObjectId 的默认字段,默认情况下,它是索引的。

_id和 id 不一样。如果需要,还可以选择添加名为 id的字段,但是除非添加索引,否则该字段将不是索引。

这只是文件里的一个打印错误。

Id 是 mongoid.id 中 _ id 的别名,它将返回文档的 _ id。 Https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#l47

如果未指定 _ id 字段,则自动生成 ObjectedId。

我的建议是:

_ id 字段

MongoDB为每个文档分配一个 _id字段,并为其分配主索引。我们也可以通过一些方法来应用二级索引。默认情况下,MongoDBObjectID类型的 _id字段创建值。这个值是在 BSON规范中定义的,它的结构是这样的:

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