使用MongoDB文档中的字段ID或_ID有什么区别?
我问这个问题,是因为我通常使用“ _id”,但是我在文档中看到了这种形式({id:-1}):http : //www.mongodb.org/display/DOCS/Optimizing+Object+IDs# OptimizingObjectIDs-Sortbyidtoinsertionsorttime
编辑
原来文档是错误的。
使用MongoDB文档中的字段ID或_ID有什么区别?
我问这个问题,是因为我通常使用“ _id”,但是我在文档中看到了这种形式({id:-1}):http : //www.mongodb.org/display/DOCS/Optimizing+Object+IDs# OptimizingObjectIDs-Sortbyidtoinsertionsorttime
编辑
原来文档是错误的。
Answers:
我希望这只是文档中的错字。该_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的其余部分不同,时间戳记和计数器字段必须按大端存储。
_id
字段是强制性的。«在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id
字段作为主键。如果插入的文档忽略该_id
字段,则MongoDB驱动程序会自动ObjectId
为该_id
字段生成一个»。
该_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。
我的两分钱:
MongoDB
为_id
每个文档分配一个字段,并为其分配主索引。还有一些方法可以应用二级索引。默认情况下,为类型MongoDB
的_id
字段创建值ObjectID
。此值在BSON
spec中定义,并且采用以下方式构造:
ObjectID(12个字节的十六进制字符串)=日期(4个字节,一个时间戳值,表示自Unix时代以来的秒数)+ MAC地址(3个字节)+ PID(2个字节)+计数器(3个字节)
_id
馆藏的每个文件都是必需的吗?换句话说,我可以创建没有该_id
字段的新文档吗?