Исключение в потоке «main» java.lang.ClassCastException: java.lang.String не может быть преобразован в com.mongodb.BasicDBObject

Я пытаюсь получить одно конкретное поле ("Versions.id") из mongo с помощью java

Монго запрос - db.getCollection('SettlementInstance').find({"_id.timeSlice" : [2018,1,1], "_id.type" : "TRANSMISSION"})

Это данные, хранящиеся в коллекции mongo. Я хочу получить "id" : "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1" с помощью java

   {
            "_id" : {
                "timeSlice" : [ 
                    2018, 
                    1, 
                    1
                ],
                "type" : "TRANSMISSION",
                "@objectName" : "SettlementInstance"
            },
            "Versions" : [ 
                {
                    "id" : "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1",
                    "status" : "ACTIVE",
                    "version" : NumberLong(11447)
                }
            ]
        }

Программа Java, которую я пытался получить из поля «id» в объекте «Версии», выдает исключение.

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» из коллекции.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку ошибка четко говорит о том, что вы пытаетесь преобразовать java.lang.String в com.mongodb.BasicDBObject, который выбрасывает java.lang.ClassCastException

Измените строку кода, как показано ниже (поскольку BasicDBObject реализует HashMap):

for (BasicDBObject dbobj : featuresArr) {
    String id = (String)((HashMap)dbobj).get("id");
    System.out.println(id);
}

Я уже пробовал как String и пытался распечатать si_id - Программа распечатала всю часть в таких версиях, как - {"id": "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1", "status": "ACTIVE", "version" : 11447} Я специально хочу, чтобы было напечатано поле "id".

janopan 18.04.2018 06:29

Приведите BasicDBObject к HashMap и получите от него идентификатор.

vijayinani 18.04.2018 07:07

@janopan Спасибо, что отметили ответ как правильный. Кроме того, не могли бы вы проголосовать за это?

vijayinani 18.04.2018 08:05
stackoverflow.com/questions/49699907/… Можете попробовать ответить на этот вопрос в поле mongoid (_id). Я просто хочу получить / распечатать только поле "_id.employeeId
janopan 18.04.2018 20:11

Этот метод get () возвращает только значение. Значит, когда ты это делаешь, это была строка

dbobj.get("id")

Вы должны передать имя поля в качестве параметра, и вы получите значение. Так что измените эту строку, как показано ниже

BasicDBObject si_id = (BasicDBObject) dbobj.get("id");

to 
String dbObjectId = dbobj.get("id");

Я уже пробовал как String и пытался распечатать si_id - Программа распечатала всю часть в таких версиях, как - {"id": "3d8a3b31-aaa0-4c2e-82b3-5eaaa80d80e1", "status": "ACTIVE", "version" : 11447} Я специально хочу, чтобы было напечатано поле "id"

janopan 18.04.2018 06:32

пробовали ли вы использовать только этот DBObject Features = cursor.next (); в цикле hasNext () ?. Вы можете напрямую получить результаты там.

Shamitha Silva 18.04.2018 06:47

Другие вопросы по теме