Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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.lang.ClassCastException:java.lang.String不能强制转换为com.mongodb.BasicDBObject_Java_Mongodb - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.ClassCastException:java.lang.String不能强制转换为com.mongodb.BasicDBObject

“线程中的异常”;“主要”;java.lang.ClassCastException:java.lang.String不能强制转换为com.mongodb.BasicDBObject,java,mongodb,Java,Mongodb,我正在尝试使用java从mongo检索一个特定字段(“Versions.id”) { "_id" : { "timeSlice" : [ 2018, 1, 1 ], "type" : "TRANSMISSION",

我正在尝试使用java从mongo检索一个特定字段(
“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()循环中?。你可以直接在那里得到结果。