当我使用Mongodb和Java时,我想在客户端生成Object id。但是,在插入记录之前,我必须首先查询mongodb以确保ObjectId()方法生成的id是唯一的。有没有办法在不访问mongodb两次的情况下生成唯一的对象ID?
答案 0 :(得分:51)
您可以在不咨询数据库的情况下在客户端上生成ObjectId。这样的ID将是唯一的(你必须努力尝试获得两个相同的对象ID)。
ObjectId id = new ObjectId();
// or this
ObjectId id = ObjectId.get();
答案 1 :(得分:22)
对象ID与您在RDMS中使用的顺序ID不同。如果根据Object ID specification正确生成它们,则无需担心它们是唯一的。
您所要做的就是确保始终创建新的对象ID而不是重复使用它们。
答案 2 :(得分:6)
从MongoDB Java Driver 3.3.0开始,有以下几种方法可以创建ObjectIds。
使用不带参数的构造函数: 提供唯一的ObjectId
1. ObjectId id1 = new ObjectId(); //Generates unique id
1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();
使用参数化构造函数: 参数影响ObjectId的唯一性
2. public ObjectId(byte[] bytes) // Receives a byte array of size 12.
3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes.
4. public ObjectId(Date date) // Receives a Date object
5. public ObjectId(Date date, int counter) //Receives date and a counter
6. public ObjectId(Date date,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Date, MachineId, PID and counter.
7. public ObjectId(int timestamp,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Epoch time in sec, MachineId, PID and counter.
了解ObjectId:
ObjectId由12个字节组成,分为:
ObjectID layout
0 1 2 3 4 5 6 7 8 9 10 11
|time |machine |pid |inc |