一、Object是什么
ObjectId('507f191e810c19729de860ea')
Object是一种MongoDB中的数据类型,由12个字节组成的全局唯一标识符。MongoDB中的每个文档都必须有一个Object _id,类似于主键的概念。Object _id可以手动指定,也可以由MongoDB自动生成。 Object _id的前四个字节表示秒级时间戳,下三个字节表示MongoDB实例,接下来两个字节表示当前进程,最后三个字节表示一个自增计数器。
二、ObjectID的用处
ObjectID在MongoDB的主键索引和排序等方面扮演着重要的角色。每个文档都必须有一个唯一的ObjectID,用来定位和访问文档。
三、ObjectID的生成方式
const { ObjectID } = require('mongodb');
const objectId = new ObjectID();
console.log(objectId); // ObjectId("5f311a4484a88157a5b043e2")
可以通过使用MongoDB驱动程序中的ObjectID来生成ObjectID。 手动生成ObjectID的方法:
const hexChars = '0123456789abcdef';
function generateObjectId() {
const chars = [];
for (let i = 0; i < 24; i += 1) {
chars.push(hexChars[Math.floor(Math.random() * 16)]);
}
return chars.join('');
}
console.log(generateObjectId()); // 5f3713e0d6b63e6ce44aabdc
以上是一个生成随机的24位16进制字符串的函数,可以模拟MongoDB自动生成ObjectID的过程。
四、ObjectID和时间
前4个字节是时间戳,使用时间戳可以近似了解文档生成的时间。可以使用ObjectID所表示时间的准确性和可读性较差,一般建议使用标准日期类型。
五、使用ObjectID查询
db.collection('users').find({
_id: ObjectID('5f3713e0d6b63e6ce44aabdc')
});
在查询MongoDB中的文档时,可以使用ObjectID来定位文档。
六、ObjectId的优点
- 全局唯一性
- 可排序性
- 支持分片,可以在分片系统中按照ObjectId进行散列。
- ObjectId是一个轻量级数据类型。