如何在mongodb中生成唯一对象id

时间:2012-01-04 07:07:03

标签: java mongodb

当我使用Mongodb和Java时,我想在客户端生成Object id。但是,在插入记录之前,我必须首先查询mongodb以确保ObjectId()方法生成的id是唯一的。有没有办法在不访问mongodb两次的情况下生成唯一的对象ID?

3 个答案:

答案 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      |