MongoDB中的主键无需明确指定,每一条记录被添加到集合之后, MongoDB都会自动添加主键,MongoDB中文档主键的名称叫做 _id,是一个ObjectId类型的数据,格式如下:
study> db.user.find() | |
[ { _id: ObjectId("62c44b4d5604b99daa91103e"), name: '小博' } ] |
数一下_id这个字段的长度,我们发现一共有24位,我们将_id字段的内容拆分成4部分去分别看其对应的含义:
62c44b4d 5604b9 9daa 91103e
1-8位字符:插入数据的时候对应的时间戳
9-14位字符:代表主机的唯一标识符,一般是机器主机名的散列值。具体这个值怎么来的,我目前也没有摸清楚
15-18位字符:产生ObjectId的PID
19-24位:计数器
插入两条数据,然后检查下对应某些位数的值是否一致:
db.getCollection("user").insert({ | |
"name": "张三", | |
"age": 28, | |
"height": 180 | |
}) | |
db.getCollection("user").insert({ | |
"name": "李四", | |
"age": 29, | |
"height": 178 | |
}) |
查看数据库里面的数据:
以_id = 62c6fdb6e3a9741ea11d9883为例,1-8位为62c6fdb6,将16进制转换为1657208246,这个就是对应的数据插入的时间,转换为时间格式后为:
_id字段虽然为系统自动生成的一个唯一标识,但是,用户也可以自定义这个id的值:
db.getCollection("user").insert({ | |
"_id":"1", | |
"name": "大刀王五", | |
"age": 29, | |
"height": 178 | |
}) |
插入之后的效果: