自增MongoDB实现自增ID的设置方法(mongodb设置id)
MongoDB `ObjectId` 是每个文档唯一表示的,类似于一个全局递增的ID.在插入数据时可以不需要指定_id,这样它会通过自增的方式生成一个_id. 自增的MongoDB的实现方法有很多,本文将主要介绍使用`ObjectId`来实现自增Id的方法.
### 使用ObjectId实现MongoDB的自增Id
要实现 MongoDB 自增Id,可以使用这样一行代码:
MyDB.collection.insert( { "_id": new ObjectId() } );
上述代码将会插入一条带有自增Id的记录到数据库。如果你想要限制自增Id的增长,可以使用 `ObjectId(“hexadecimal_string”)` 方法来定义指定的唯一Id,如下所示:
MyDB.collection.insert( { "_id": new ObjectId(“hexadecimal_string) } );
### ObjectId包含信息
`ObjectId` 并不仅仅只是一个递增的数字,它实际上由12个十六进制的字母组成,包含了生成这个ID的时间、机器、进程以及伪随机序列。由此可见,不需要为每条文档手动指定_id,MongoDB 在插入文档时可以为我们自动生成唯一的 ObjectId。
### 优点及缺点
自增MongoDB的自增Id`ObjectId`有一定的优点及缺点:
优点:
– 与性能无关,MongoDB 对_id自增是有内置优化的,所以不用担心自增ID会带来性能问题
– 生成的ObjectId打包更多的信息,不仅是递增的ID而且还包括系统时间,机器
缺点:
– 自增Id不安全,因为它可能会被猜测到,进而导致把数据暴露出去
– 不支持分库分表规则,ObjectId 无法区分不同的库表,因此不能作为分布式数据库的主键
### 结论
从上文可以看出,自增MongoDB的自增Id`ObjectId`可以通过简单的代码一行代码实现,不容易出现性能问题,但它不安全且也不支持分库分表规则,需要注意。