获取使用Java驱动程序插入的最后一个mongoDB文档的ID
问题的原因是在MongoDB 2.2.2和Java驱动程序2.10.1中,使用doc.set("_id", new ObjectId())
无法获取插入文档的_id。然而,手动创建一个ObjectId的解决方法可以解决这个问题。下面是一个工作示例代码:
BasicDBObject doc = new BasicDBObject("_id", new ObjectId()); System.out.println("doc.id before: " + doc.get("_id")); new Mongo("localhost").getDB("test").getCollection("t").insert(doc); System.out.println("doc.id after: " + doc.get("_id"));
这个代码在MongoDB 2.2.2和驱动程序2.10.1的新版本上经过测试,运行正常。
问题的原因是使用过时的mongodb驱动程序,导致无法获取最后插入文档的ID。解决方法是使用更新的mongodb驱动程序"mongodb-driver-sync",并使用insertOne()方法来插入文档并获取最后插入文档的ID。下面是代码示例:
import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import org.bson.types.ObjectId; public class Main { public static void main(String[] args) { // 创建MongoDB客户端 try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) { // 获取数据库 MongoDatabase database = mongoClient.getDatabase("mydb"); // 获取集合 MongoCollectioncollection = database.getCollection("mycollection"); // 创建文档 Document doc = new Document("name", "Matt"); // 插入文档 collection.insertOne(doc); // 获取最后插入文档的ID ObjectId id = (ObjectId) doc.get("_id"); System.out.println("Last inserted document ID: " + id); } } }
请注意,您需要根据您的实际情况更改连接字符串、数据库名称和集合名称。
这样,您就可以使用最新的mongodb驱动程序并成功获取最后插入文档的ID。