これは多かれ少なかれあなたのコレクションをどのようにデザインするかという問題です。 Mongoはタイプについて何も知らないため、ドキュメントを互いに区別できるようにメタデータを追加する必要があります。したがって、クエリを実行するときは、これらの制約もクエリに追加する必要があります。 _class
を参照できることに注意してください DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
を介したキー 。
クエリにAPIを追加して、次のような特定のタイプのドキュメントのみを取得したいことを表現することを検討しました。
mongo.find(new Query(Teacher.class), Teacher.class);
ドメインクラスを2回記述しなければならないのは、まだ少し奇妙に感じます(これは、結果を特定のタイプのドキュメントに制限し、それらを別のクラスにマップする場合に意味があります)。それを超えて、結果を正確に含むドキュメントにのみ制限することができました。 タイプは文字列として格納され、継承はクラスがすでにロードされている場合にのみ適用できます。したがって、タイプがPerson
のドキュメントをクエリする場合 すべてをロードする必要があります 最初にドキュメントを作成し、タイプを検索し、タイプチェックを実行して、パフォーマンス上の理由から最適ではない結果を破棄する可能性があります。
別のオプションは、クラスが割り当て可能なすべてのタイプを格納することです(Object
を除くほとんどすべてのインターフェースとスーパークラス) 多分)しかし、それはかなりの量のデータが保存される原因になります。これは、@Document
にフラグを追加することでアプローチできます。 注釈。
結論:現在、他に方法はありませんが、これを改善する方法について提案がある場合は、JIRAチケットを自由に調達してください。