并发 - 以线程安全的方式获取MongoDB生成的通过Java插入的对象的ID

7 java concurrency mongodb mongodb-java

获取通过Java插入的文档的Mongo生成ID的最佳方法是什么.

插入文档的Java进程是多线程的,这意味着我们需要一些原子方式来插入和返回对象的ID.

另外,如果我们设置一个唯一索引,如果该对象是重复的,是否会返回一个ID?

谢谢!

Sea*_*lly 13

尽早生成ObjectId,在插入中使用它,并且不需要让数据库将其返回给您.ObjectId不使用共享序列号是唯一的,因此如果在插入或检索之后生成一个序列号并不重要.

public ObjectId createThing() {
    ObjectId result = new ObjectId();
    BasicDBObject thingToInsert = new BasicDbObject();
    thingToInsert.put('_id', result);
    //set other fields here
    collection.insert(thingToInsert);
    return result;
}
Run Code Online (Sandbox Code Playgroud)