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

Aには( documentation)DBObjectというメソッドがあります。最初に変換する必要はありません。keySetMap

現時点では、基になる BSON データ型を特定するためのメソッドは公開されていないため、 を使用して調査するinstanceofか、から返されるgetClassの基になるデータ型を特定する必要があります。Objectget

たとえば、ソースコードを見るとBasicBSONObject、キャストするヘルパー関数が基本的なチェックを行ってからキャストを強制する方法がわかります。

于 2013-10-02T11:09:28.067 に答える