获取带有Java驱动程序的mongoDB中最后插入的文档的ID

Mat*_*t W 101 java mongodb

有没有一种简单的方法来使用Java驱动程序获取mongoDB实例的最后插入文档的ID(ObjectID)?

Mat*_*t W 188

讨厌回答我自己的问题,但我才意识到你可以这样做:

BasicDBObject doc = new BasicDBObject( "name", "Matt" );
collection.insert( doc );
ObjectId id = (ObjectId)doc.get( "_id" );
Run Code Online (Sandbox Code Playgroud)


zlo*_*lob 12

这样做很安全

doc.set("_id", new ObjectId())
Run Code Online (Sandbox Code Playgroud)

如果你看看驱动程序代码

if ( ensureID && id == null ){
    id = ObjectId.get();
    jo.put( "_id" , id );       
}

public static ObjectId get(){
    return new ObjectId();
}
Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,在 MongoDB 2.2.2(相对于之前我使用 2.2.0 时)和 Java 驱动程序 2.10.1 中,答案中的代码不起作用;在我将对象更新到文档中后,我似乎无法获取它的 _id,即使 MongoDB 明显自动生成 ObjectId。但是,您手动创建 ObjectId 的解决方案确实有效,感谢您提供此选项! (2认同)

Jad*_*mas 9

为了避免转换ObjectObjectId,给定a com.mongodb.client.MongoCollection collection和a org.bson.Document doc,您可以执行以下操作:

collection.insert(doc);
ObjectId id = doc.getObjectId("_id");
Run Code Online (Sandbox Code Playgroud)


chx*_*chx 7

我不知道Java驱动程序,但对于后代,可以运行getLastError命令来获取写入的_id,甚至是upsert(从1.5.4开始)