Docs Menu
Docs Home
/ / /
Java Reactive Streams 드라이버
/

반환할 필드 지정

이 페이지의 내용

  • 개요
  • 샘플 데이터
  • 프로젝션 유형
  • 포함할 필드 지정
  • _id 필드 제외
  • 제외할 필드 지정
  • 프로젝션 오류
  • 포함 및 제외 오류
  • 추가 정보
  • API 문서

이 가이드 에서는 Java Reactive Streams 운전자 를 사용하여 읽기 작업에서 반환할 필드를 지정하는 방법을 학습 수 있습니다. MongoDB 가 쿼리 에서 반환하는 필드를 지정하는 문서 인 프로젝션 을 사용하여 이러한 필드를 선택할 수 있습니다.

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트sample_restaurants.restaurants 컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 시작하기 가이드 를 참조하세요.

중요

프로젝트 리액터 라이브러리

이 가이드 에서는 Project Reactor 라이브러리를 Publisher 사용하여 Java Reactive Streams 운전자 메서드에서 반환된 인스턴스를 사용합니다. 프로젝트 Reactor 라이브러리와 사용 방법에 학습 보려면 Reactor 문서에서 시작하기 를 참조하세요. 이 가이드 에서 Project Reactor 라이브러리 메서드를 사용하는 방법에 학습 보려면 MongoDB 에 데이터 쓰기 가이드 를 참조하세요.

프로젝션 을 사용하여 검색된 문서에 포함하고 제외할 필드를 지정할 수 있습니다. 기본값 특정 필드를 포함하면 다른 모든 필드가 제외되므로 결과에서 _id 필드 를 제외하지 않는 한 포함 및 제외 문을 단일 프로젝션 으로 결합할 수 없습니다.

읽기 작업의 결과에 포함할 필드를 지정하려면 다음 구문을 사용합니다.

projection(fields(include("<field name>")))

프로젝션 을 사용하려면 find() 메서드에 쿼리 필터하다 를 전달합니다. 그런 다음 projection() 메서드를 find() 메서드 호출에 연결합니다.

다음 예시 에서는 find() 메서드를 사용하여 name 필드 값이 "Emerald Pub" 인 문서를 조회 합니다. 그런 다음 프로젝션 을 사용하여 반환된 문서에서 name, cuisineborough 필드만 포함합니다.

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(include("name", "cuisine", "borough")));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

프로젝션 을 사용하여 반환 문서 에 포함할 필드를 지정하면 기본값 _id 필드 도 포함됩니다. 다른 모든 필드는 암시적으로 제외됩니다. 반환된 문서에서 _id 필드 를 생략하려면 명시적으로 제외 해야 합니다.

excludeId() 메서드를 사용하여 반환된 문서에서 _id 필드 를 제외할 수 있습니다.

다음 예시 에서는 이전 예시 와 동일한 쿼리 를 수행하지만 반환된 문서에서 _id 필드 도 제외합니다.

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(include("name", "cuisine", "borough"), excludeId()));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

읽기 작업 결과에서 제외할 필드를 지정하려면 다음 구문을 사용합니다.

projection(fields(exclude("<field name>")))

프로젝션 을 사용하려면 find() 메서드에 쿼리 필터하다 를 전달합니다. 그런 다음 projection() 메서드를 find() 메서드 호출에 연결합니다.

다음 예제에서는 find() 메서드를 사용하여 name 필드 값이 "Emerald Pub" 인 모든 레스토랑을 찾습니다. 그런 다음 프로젝션 을 사용하여 반환된 문서에서 gradesaddress 필드를 제외합니다.

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(exclude("grades", "address")));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40668598'}

프로젝션을 사용하여 제외할 필드를 지정하면 지정되지 않은 모든 필드가 반환 문서에 암시적으로 포함됩니다.

다음 섹션에서는 프로젝션을 사용할 때 발생할 수 있는 오류에 대해 설명합니다.

단일 프로젝션 에 필드를 포함 및 제외하려고 하면 운전자 는 다음을 반환합니다.

OperationFailure: ... Cannot Do Exclusion on Field <field> in Inclusion Projection

이 오류를 해결하려면 프로젝션 이 포함할 필드만 지정하거나 제외할 필드만 지정해야 합니다.

프로젝션에 학습 보려면 MongoDB Server 매뉴얼의 프로젝트 필드 가이드 를 참조하세요.

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

  • find()

  • FindPublisher

돌아가기

Retrieve Data