在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());
答案 0 :(得分:1)
DBObject
有一个名为keySet
(documentation)的方法。您不需要先转换为Map
。
此时没有公开的方法来确定基础BSON数据类型,因此您需要使用instanceof
或getClass
进行调查,以确定Object
的基础数据类型从get
返回的。
例如,如果查看BasicBSONObject
的{{3}}代码,您将看到该强制转换器的辅助函数如何进行一些基本检查,然后强制执行转换。