sql >> データベース >  >> NoSQL >> MongoDB

Spring-同じコレクションに格納されている複数のクラスをクエリするデータmongodb

    これは多かれ少なかれあなたのコレクションをどのようにデザインするかという問題です。 Mongoはタイプについて何も知らないため、ドキュメントを互いに区別できるようにメタデータを追加する必要があります。したがって、クエリを実行するときは、これらの制約もクエリに追加する必要があります。 _classを参照できることに注意してください DefaultMongoTypeMapper.DEFAULT_TYPE_KEYを介したキー 。

    クエリにAPIを追加して、次のような特定のタイプのドキュメントのみを取得したいことを表現することを検討しました。

    mongo.find(new Query(Teacher.class), Teacher.class);
    

    ドメインクラスを2回記述しなければならないのは、まだ少し奇妙に感じます(これは、結果を特定のタイプのドキュメントに制限し、それらを別のクラスにマップする場合に意味があります)。それを超えて、結果を正確に含むドキュメントにのみ制限することができました。 タイプは文字列として格納され、継承はクラスがすでにロードされている場合にのみ適用できます。したがって、タイプがPersonのドキュメントをクエリする場合 すべてをロードする必要があります 最初にドキュメントを作成し、タイプを検索し、タイプチェックを実行して、パフォーマンス上の理由から最適ではない結果を破棄する可能性があります。

    別のオプションは、クラスが割り当て可能なすべてのタイプを格納することです(Objectを除くほとんどすべてのインターフェースとスーパークラス) 多分)しかし、それはかなりの量のデータが保存される原因になります。これは、@Documentにフラグを追加することでアプローチできます。 注釈。

    結論:現在、他に方法はありませんが、これを改善する方法について提案がある場合は、JIRAチケットを自由に調達してください。



    1. マングースの検証:必須:false、検証:正規表現、空の値の問題

    2. Excelファイル(XLSX)をmongoDBにインポートする方法

    3. mongodb集計を使用して、ネストされた配列内にある値の合計を見つける方法は?

    4. MongoDBの別の数値フィールドを使用して数値フィールドを更新する方法