如何检索DBObject的模式?

时间:2013-10-02 09:38:25

标签: java mongodb mongodb-java

在mySQL中,describe语句可用于检索给定表的模式,遗憾的是我无法找到MongoDB java驱动程序的类似功能:(

让我说我有流动的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

既然我已经解释了架构重审的内容,那么有些人可以很好并告诉我该怎么做吗?

如果有帮助的话,我只需要知道字段名称(因为数据类型总是相同的,但是知道如何检索数据类型也很好。)


工作arround,将DBObject转换为Map,然后将Map转换为Set,设置为Iterator并提取属性名称/值......现在仍然知道如何提取数据类型。

这是:

    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());

1 个答案:

答案 0 :(得分:1)

DBObject有一个名为keySetdocumentation)的方法。您不需要先转换为Map

此时没有公开的方法来确定基础BSON数据类型,因此您需要使用instanceofgetClass进行调查,以确定Object的基础数据类型从get返回的。

例如,如果查看BasicBSONObject的{​​{3}}代码,您将看到该强制转换器的辅助函数如何进行一些基本检查,然后强制执行转换。