并发 – 以线程安全的方式获取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中文档的值。