Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取上面MongoDB 3.3.0中的文档的id_Java_Mongodb_Mongodb Java 3.3.0 - Fatal编程技术网

Java 获取上面MongoDB 3.3.0中的文档的id

Java 获取上面MongoDB 3.3.0中的文档的id,java,mongodb,mongodb-java-3.3.0,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 documentObject;
String docMongoId = ((DBObject) documentObject).removeField("_id").toString();
虽然不是在编译过程中而是在执行过程中导致

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

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

MongoCollection<Document> dbCollection = mongoClient.getDatabase("dbName")
                .getCollection("collectionName", Document.class);
MongoCollection dbCollection=mongoClient.getDatabase(“dbName”)
.getCollection(“collectionName”,Document.class);
寻求帮助,已经通过了几个链接-

这主要建议使用
BasicDBObject
,我们不想再使用旧的上下文。现在有没有办法用java访问文档的
\u id
(带有客户端更新)呢


请务必询问此处所需的任何附加或缺失信息。

想法是将bson类型文档转换为您的模型文档。添加了示例类来演示该用法

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 + '\'' +
                '}';
        }

    }
}
import com.mongodb.MongoClient;
导入com.mongodb.client.MongoCollection;
导入com.mongodb.client.MongoCursor;
导入com.mongodb.client.MongoDatabase;
导入org.bson.types.ObjectId;
公共类Mongo{
公共静态void main(字符串[]args){
MongoClient MongoClient=新的MongoClient();
MongoDatabase db=mongoClient.getDatabase(“dbName”);
MongoCollection dbCollection=db.getCollection(“collectionName”,org.bson.Document.class);
MongoCursor迭代器=dbCollection.find().iterator();
while(iterator.hasNext()){
org.bson.Document inDoc=iterator.next();
Document outDoc=新文档();
outDoc.setId(inDoc.getObjectId(“_id”);
outDoc.setName(inDoc.getString(“name”);
System.out.print(outDoc.toString());
}
}
公共静态类文档{
私有ObjectId;
私有字符串名称;
公共ObjectId getId(){
返回id;
}
public void setId(ObjectId id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@凌驾
公共字符串toString(){
返回“文件{”+
“id=”+id+
“,name=”“+name+”\“””+
'}';
}
}
}

你到底想重构什么?你也可以添加旧代码吗?请添加一个示例。@Veeram其目的是保留文档的_id,并在更新现有文档或创建新文档(如果没有与搜索匹配的文档)时保留它。另一个doc
客户端
中也共享了_id,它基本上标志着存在最新的doc。感谢您的解释。如果你需要我改进我的答案,请告诉我。