0

在 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

既然我解释了模式重试是什么,some1 可以很好地告诉我该怎么做吗?

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


一个工作方法,是将 DBObject 转换为 Map,然后将 Map 转换为 Set,将 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());
4

1 回答 1

1

ADBObject有一个名为keySet( documentation)的方法。您不需要转换为Map第一个。

此时没有公开的方法来确定基础 BSON 数据类型,因此您需要使用instanceofgetClass确定Objectget.

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

于 2013-10-02T11:09:28.067 回答