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

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

插入文档的Java进程是multithreading的,这意味着我们需要一些primefaces方式来插入和返回对象的ID。

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

谢谢!

尽早生成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; } 

由Mongo生成的本机ObjectId是全局唯一的,可以从multithreading应用程序中安全地使用。

生成的ObjectId可以从_id键下的DbObject获取。

如果插入的文档违反了唯一索引约束 – java驱动程序可能会抛出exception,具体取决于WriteConcern的值:

  http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html 

如果它的值更高,那么将抛出NORMAL-exception。

可以为每个插入(或更新)方法指定WriteConcern,也可以使用DBCollection.setWriteConcern全局指定WriteConcern

我用_id检索文档但是当我将数据输入到我的java类中时,例如mobile,_id属性是ObjectID类型我改变它设置mongodb中文档的值。