在上面的MongoDB 3.3.0中获取文档的_id

时间:2016-11-28 11:20:27

标签: java mongodb mongodb-java-3.3.0

尝试从我们的某个服务重构大量代码我最终使用了一段代码:

Document documentObject;
String docMongoId = ((DBObject) documentObject).removeField("_id").toString();

虽然不是在编译,但在执行过程中导致了

  

java.lang.ClassCastException:com.pack.model.Document无法强制转换   com.mongodb.DBObject

其中Document是我们定义的类型。我们现在有一段代码如下:

MongoCollection<Document> dbCollection = mongoClient.getDatabase("dbName")
                .getCollection("collectionName", Document.class);

寻求帮助,已经通过了几个链接 -

Get ID of last inserted document in a mongoDB w/ Java driver

MongoError: cannot change _id of a document

How to query documents using "_id" field in Java mongodb driver?

主要建议使用BasicDBObject,我们不想再使用旧的上下文了。有没有办法可以在java中访问文档的_id(带有客户端更新)?

请询问此处所需的任何其他信息或缺失信息。

1 个答案:

答案 0 :(得分:2)

我们的想法是将bson类型的Document转换为您的模型Document。添加了演示使用的示例类。

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.types.ObjectId;

public class Mongo {

    public static void main(String[] args) {

        MongoClient mongoClient = new MongoClient();

        MongoDatabase db = mongoClient.getDatabase("dbName");

        MongoCollection <org.bson.Document> dbCollection = db.getCollection("collectionName", org.bson.Document.class);

        MongoCursor <org.bson.Document> iterator = dbCollection.find().iterator();

        while (iterator.hasNext()) {
            org.bson.Document inDoc = iterator.next();
            Document outDoc = new Document();
            outDoc.setId(inDoc.getObjectId("_id"));
            outDoc.setName(inDoc.getString("name"));
            System.out.print(outDoc.toString());
        }

    }


    public static class Document {

        private ObjectId id;
        private String name;

        public ObjectId getId() {
            return id;
        }

        public void setId(ObjectId id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Document{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
        }

    }
}