2017-09-17 5 views
0

내 봄 부팅 응용 프로그램에서 mongodb를 사용하고 있으며 mongo 저장소 인터페이스를 사용하여 데이터베이스에서 데이터를 가져오고 있습니다. 데이터를 가져 오는 방법입니다.스프링 몽고 리포지토리를 사용하여 mongo db에서 데이터를 얻는 방법은 무엇입니까?

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

이는 나에게 학교 객체를 줄 것이다 나는 거기에서 모든 데이터를 얻을 수 있지만 내 질문에 내 응용 프로그램의 성능에 영향을 미칠 i는 전체 개체 매번를 얻을 수 있다면 해당 개체에서 일부 데이터가 필요합니다 경우에도 전 몇몇 분야가 필요해. 만약 그렇다면 무엇을 검색 할 수있는 메소드가 될 것인가? 쿼리 어노테이션을 사용하면 필드를 제한 할 수 있지만 그 다음에는 다른 모든 필드를 null로 지정하고 데이터는 지정된 필드에만있는 전체 개체를 제공한다는 것을 알 수 있습니다. 어떤 지침이 도움이 될 것입니다.

+0

성능에 너무 많은 변수가 포함되므로 성능이 얼마나 좋은지에 따라 다르지만 응용 프로그램이 데이터베이스를 읽는 횟수를 줄이려면 Caching https://spring.io/guides를 사용할 수 있습니다/gs/캐싱 /. –

+0

글쎄 내 요구 사항은 일부 페이지 에서이 같은 경우에만 여러 필드를 필요로 할 때 여러 필드를 필요로 할 때 여러 필드를 필요로하는 경우에는 하나의 필드가 필요합니다 전체 개체를 얻을해야하고 단일 필드가 필요할 때 하나 하나하지만 내가 알고 싶다 또는 거기에 혜택을 데이터베이스 성능 작업을 수행 한 및 그것을 반환하는 응답의 크기가 아니라 회신 – 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를 사용하는 기본 키 그래서 그 하나의 학교 개체 목록입니다 그것을 향상시키기 위해 당신의 생각을 공유하십시오. 나는 다른 해결책을 듣고 싶습니다.