7

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

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

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

谢谢!

4

3 回答 3

14

尽早生成 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;
}
于 2011-10-23T16:36:29.650 回答
1

Mongo 生成的原生 ObjectId 是全局唯一的,可以在多线程应用程序中安全使用。

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

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

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

如果它的值更高,则将抛出 NORMAL- 异常。

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

于 2011-10-22T16:11:36.830 回答
1

我用 _id 检索文档,但是当我将数据放入我的 java 类(例如移动设备)中时,_id 属性是 ObjectID 类型,我更改它在 mongodb 中设置文档的值。

于 2012-10-30T16:08:09.980 回答