2013-10-02 98 views
0

在MySQL中describe語句可以用來檢索一個給定的表的模式,遺憾的是我不能爲MongoDB的Java驅動程序:(如何檢索DBObject的模式?

比方說,我有我也有流動的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轉換成地圖,然後映射到一個組,設置一個迭代器和提取屬性名稱/值......還有現在知道如何提取數據類型。

是這樣的:

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

一個DBObject有一個名爲方法keySetdocumentation)你不應該需要轉換爲首先Map

有沒有裸露的方法來確定基礎BSON數據。因此您需要使用instanceofgetClass來確定從get返回的Object的基礎數據類型。

例如,如果您查看BasicBSONObjectsource代碼,您將看到投影的幫助器函數如何執行一些基本檢查,然後強制執行演員。