获取使用Java驱动程序插入的最后一个mongoDB文档的ID

10 浏览
0 Comments

获取使用Java驱动程序插入的最后一个mongoDB文档的ID

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

0
0 Comments

问题的原因是在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的新版本上经过测试,运行正常。

0
0 Comments

问题出现的原因是为了避免将Object类型强制转换为ObjectId类型。根据给定的com.mongodb.client.MongoCollection集合和org.bson.Document文档,可以执行以下操作:

collection.insert(doc);

ObjectId id = doc.getObjectId("_id");

解决方法是通过将文档插入集合并使用getObjectId("_id")方法获取插入的文档的ObjectId。

这个解决方法可能在3.x版本的Java驱动中变得可行。

0
0 Comments

问题的原因是使用过时的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");
            // 获取集合
            MongoCollection collection = 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。

0