获取通过 Java 插入的文档的 Mongo 生成 ID 的最佳方法是什么。
插入文档的 Java 进程是多线程的,这意味着我们需要一些原子的方式来插入和返回对象的 ID。
另外,如果我们设置一个唯一索引,如果对象是重复的,会返回一个ID吗?
谢谢!
获取通过 Java 插入的文档的 Mongo 生成 ID 的最佳方法是什么。
插入文档的 Java 进程是多线程的,这意味着我们需要一些原子的方式来插入和返回对象的 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 是全局唯一的,可以在多线程应用程序中安全使用。
生成的 ObjectId 可以从 _id 键下的 DbObject 中获取。
如果插入的文档违反了唯一索引约束 - java 驱动程序可能会抛出异常,具体取决于 WriteConcern 的值:
http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html
如果它的值更高,则将抛出 NORMAL- 异常。
可以为每个单独的插入(或更新)方法指定 WriteConcern,也可以使用 DBCollection.setWriteConcern 全局指定
我用 _id 检索文档,但是当我将数据放入我的 java 类(例如移动设备)中时,_id 属性是 ObjectID 类型,我更改它在 mongodb 中设置文档的值。