2017-09-17 7 views
0

私は春のブートアプリケーションでmongodbを使用しています。私はmongoリポジトリインタフェースを使用してデータベースからデータを取得しています。これはデータを取得する方法です。私は、オブジェクト全体を毎回取得する場合春のmongoリポジトリを使用してmongo dbからデータを取得する方法はありますか?

 School sch=repository.findOne("id"); 

これは、私はそこからすべてのデータを取得することができますが、私の質問は私の学校のオブジェクトを与えるだろう、それは私のアプリケーションのパフォーマンスに影響を与えるだろう、私は、そのオブジェクトからいくつかのデータを必要とするも、私の場合いくつかのフィールドが必要です。もしそうなら、私は検索する方法があります。そして、私はクエリアノテーションを使ってフィールドを制限することができますが、それでもオブジェクト全体には他のすべてのフィールドをヌルにし、データは指定するフィールドにのみあります。どんな指導も役に立つでしょう。

+0

パフォーマンスには多すぎる変数が含まれているため、優れたパフォーマンスに依存しますが、アプリケーションがデータベースを読み取る回数を減らす必要がある場合は、Caching https://spring.io/guides/gs/caching/ –

+0

よく私の要件はいくつかのページでこれのようなものです私は複数のフィールドを必要とする場合、私は複数のフィールドが必要なときに私は複数のフィールドを必要とするいくつかの場合は1つのフィールドが必要ですそれが利益であるか、それともデータベースパフォーマンスがデータベースのパフォーマンスに影響しないかを知りたいのですが、返す応答のサイズではなく、返す応答のサイズではありません。 – ashutosh

答えて

1

投影インターフェイスを使用して、属性のサブセットを取得できます。 Spring Data Mongo DB

interface NamesOnly { 
    String getName(); 
} 

interface SchoolRepository extends Repository<School, UUID> { 
    NamesOnly findOneById(String id); 
} 
+0

IDを使用してクエリを行い、複数のケースで単一フィールドを取得する方法findOneById 。 – ashutosh

0

だから、これは私が唯一のIDを使って探していますので、私はIDを使用して結果を検索し、私は結果にしたいフィールドのみを取得することができ、私が見つける唯一のソリューションである他のオプションをドキュメントを読むと、読んだ後だから私はfindbyIdをオーバーロードしなければなりません。プロジェクションインターフェースは戻り値の型を変更するだけなので、ここでは使用できません。ここ

 @Query(value="{_id:?0}",fields="{?1:1,?2:1}") 
List<School> findById(String schoolId, String fieldOne,String fieldTwo); 

?0出力がリストされるフィールドのないように、今、私はいずれにも使用することができ、これらのオーバーロードされたメソッドを作成しないでできる名前schoolIdのプレースホルダーですと?1と?2は、フィールドのプレースホルダです私は学校のオブジェクトを取得するために私はちょうど(0)​​を得ることができ、それはnullとしてこれは私が見つけることができる最高のすべての他のフィールドを持っているので、私はプライマリキーであるIDを使用しているので、学校のそれを改善するためにあなたの考えを共有してください。私は他の解決策を聞いて欲しいです。

関連する問題