Как получить схему объекта DBObject?

В mySQL оператор describe можно использовать для получения схемы данной таблицы, к сожалению, я не смог найти аналогичную функциональность для java-драйвера MongoDB :(

Допустим, у меня есть текущие документы BSON:

{
_id: {$oid:49},
values: { a:10, b:20}
}
,
{
_id: {$oid:50},
values: { b:21, c:31}
}

Теперь предположим, что я делаю:

DBObject obj = cursor.next();
DBObject values_1 = (DBObject) obj.get("values");

и схема должна быть примерно такой:

>a : int
>b : int

и для следующего документа:

DBObject obj = cursor.next();
DBObject values_2 = (DBObject) obj.get("values");

схема должна быть:

>b : int
>c : int

Теперь, когда я объяснил, что такое повторная проверка схемы, может ли кто-нибудь быть милым и сказать мне, как это сделать?

Если это поможет, в моем случае мне нужно знать только имена полей (поскольку тип данных всегда один и тот же, но было бы неплохо также знать, как получить типы данных).


Работа вокруг: преобразование DBObject в карту, затем карту в набор, набор в итератор и извлечение имен/значений атрибутов... Теперь у вас все еще есть представление о том, как извлекать типы данных.

Это:

    DBObject values_1 = (DBObject) obj.get("values");
    Map _map = values_1.toMap();
//    Set set = _map.entrySet(); // if you want the <key, value> pairs
    Set _set_keys = _map.keySet();
    Iterator _iterator = _set_keys.iterator();
    while (_iterator.hasNext())
         System.out.println("-> " + _iterator.next());

person SQL.injection    schedule 02.10.2013    source источник


Ответы (1)


У DBObject есть метод с именем keySet (документация)< /а>. Вам не нужно сначала конвертировать в Map.

На данный момент нет открытого метода для определения базового типа данных BSON, поэтому вам нужно изучить использование instanceof или getClass, чтобы определить базовый тип данных Object, который возвращается из get.

Если вы посмотрите на source код для BasicBSONObject, вы увидите, как вспомогательные функции, выполняющие приведение типов, выполняют некоторые базовые проверки, а затем принудительно приводят к приведению.

person WiredPrairie    schedule 02.10.2013