3

Mongo をネイティブ Java ドライバー (サードパーティ ライブラリ/ORM なし) で使用しています。私はこれを持っています:

public class Release extends ReflectionDBObject {

    //other fields omitted    

    private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>();

}

public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...}

2 つの "ReleaseDetailsByTerritory" エントリを持つ "Release" エントリを取得し、それらを 2 つの ReleaseDetailsByTerritory クラス インスタンスのリストを含む Release クラス インスタンスで自動インスタンス化する場合は、次のようにする必要があります。

releaseColl.setObjectClass(Release.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class);
Release r = (Release) releaseColl.findOne();

つまり、埋め込み配列の潜在的な各要素を対応するクラスに具体的にマップする必要があります。

埋め込み配列のすべての要素と任意の要素を特定のクラスにマップすることを Mongo ドライバーに伝える方法はありますか? 何かのようなもの :

collection.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class);

?

ありがとう。また、「Spring MondoDb モジュールまたは Morphia を使用してください」とは言わないでください。これが Mongo ネイティブ Java ドライバーで実現可能かどうかを知りたいです。

4

1 に答える 1

2

ソースコードを見ると、これは不可能だと思います。また、必要なものに便利な機能を作成する明確な方法もありません。配列要素ごとに setInternalClass を呼び出さなければならないことは、大規模な配列の場合に大量のメモリ使用量が発生することを考えると、ほとんどオプションではありません。

Morphia などの完全なマッピング ソリューションに行かなくても、必要なことを行う "Document" クラスの独自の実装を実装することを検討することをお勧めします (これは実際にはかなり洗練されており、少なくとも Spring よりも優れています)。

また、jira.mongodb.org で JIRA の問題を開いて、この機能をリクエストすることも検討できます。

于 2012-01-13T14:19:56.307 に答える