“线程中的异常”;“主要”;java.lang.ClassCastException:java.lang.String不能强制转换为com.mongodb.BasicDBObject
我正在尝试使用java从mongo检索一个特定字段(“线程中的异常”;“主要”;java.lang.ClassCastException:java.lang.String不能强制转换为com.mongodb.BasicDBObject,java,mongodb,Java,Mongodb,我正在尝试使用java从mongo检索一个特定字段(“Versions.id”) { "_id" : { "timeSlice" : [ 2018, 1, 1 ], "type" : "TRANSMISSION",
“Versions.id”
)
{
"_id" : {
"timeSlice" : [
2018,
1,
1
],
"type" : "TRANSMISSION",
"@objectName" : "SettlementInstance"
},
"Versions" : [
{
"id" : "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1",
"status" : "ACTIVE",
"version" : NumberLong(11447)
}
]
}
Mongo查询-db.getCollection('SettlementInstance').find({u id.timeSlice:[2018,1,1],“\u id.type:“TRANSMISSION”})
这是存储在mongo collection中的数据。我想使用java检索“id”:“3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1”
{
"_id" : {
"timeSlice" : [
2018,
1,
1
],
"type" : "TRANSMISSION",
"@objectName" : "SettlementInstance"
},
"Versions" : [
{
"id" : "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1",
"status" : "ACTIVE",
"version" : NumberLong(11447)
}
]
}
我试图检索“Versions”对象下的“id”字段的Java程序,我的代码给出了一个异常
String feedName = "ServicePointInputAdapter";
Mongo mongo = new Mongo(host);
DB db = mongo.getDB(("dbname"));
DBCollection collection = db.getCollection("SettlementInstance");
BasicDBObject whereQuery = new BasicDBObject();
whereQuery.put("_id.type", "TRANSMISSION");
whereQuery.put("_id.timeSlice", Arrays.asList(2018,1,1));
DBCursor cursor = collection.find(whereQuery);
try {
while (cursor.hasNext()) {
DBObject Features = cursor.next();
BasicDBList features = (BasicDBList) Features.get("Versions");
BasicDBObject[] featuresArr = features.toArray(new BasicDBObject[0]);
for (BasicDBObject dbobj : featuresArr) {
***** BasicDBObject si_id = (BasicDBObject) dbobj.get("id"); ***** //Getting error in the line }
}
} finally {
cursor.close();
}
}
}
不幸的是,我遇到了这样的例外情况-
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to com.mongodb.BasicDBObject.
有人能帮我解决这个问题并从集合中检索“Versions.id”字段吗。因为错误清楚地表明您正试图将
java.lang.String
强制转换为com.mongodb.BasicDBObject
,而该对象正在抛出java.lang.ClassCastException
更改代码行如下(因为BasicDBObject实现了HashMap):
此get()方法仅返回值。所以当你这样做的时候,它是一根弦
dbobj.get("id")
您应该将字段名作为参数传递,然后您将获得值。所以像下面这样改变这一行
BasicDBObject si_id = (BasicDBObject) dbobj.get("id");
to
String dbObjectId = dbobj.get("id");
我已经尝试使用字符串并尝试打印si_id-程序在诸如-{“id”:“3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1”,“状态”:“活动”,“版本”:11447}等版本下打印整个部件。我特别想要“id”要打印的字段。将BasicDBObject键入HashMap并从中获取id。@janopan感谢您将答案标记为正确。另外,你能投票吗?你能试着在mongoid字段(_id)上回答这个问题吗。我只想获取/打印“\u id.employeeId”字段我已经尝试作为字符串并尝试打印si\u id-程序在诸如-{“id”:“3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1”、“status”:“ACTIVE”、“version”:11447}等版本下打印了整个部分。我特别想要“id”要打印的字段是否仅尝试使用此DBObject Features=cursor.next();在hasNext()循环中?。你可以直接在那里得到结果。