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。感谢您的解释。如果你需要我改进我的答案,请告诉我。