문서 메뉴
문서 홈
/ / /
Java 동기화 드라이버
/ /

필터 빌더

이 페이지의 내용

  • 개요
  • 비교
  • 논리
  • 배열
  • 요소
  • 평가
  • 비트 단위
  • 지리 공간

이 가이드에서는 빌더를 사용하여 MongoDB Java 드라이버에서 쿼리에 대한 필터를 지정하는 방법을 배울 수 있습니다.

빌더는 BSON 객체를 구성하는 데 도움이 되는 MongoDB Java 드라이버에서 제공하는 클래스입니다. 자세한 내용 은 빌더 가이드를 참조하세요.

필터는 MongoDB가 보고 싶은 결과로 결과를 제한하기 위해 사용하는 작업입니다.

필터를 사용하는 곳은 다음과 같습니다:

  • find()

  • 애그리게이션 일치 단계

  • deleteOne()/deleteMany()

  • updateOne()/updateMany()

필터를 사용한 쿼리 결과의 몇 가지 예는 다음과 같습니다.

  • 0~25달러의 항목

  • 실내 수영장과 무료 주차장을 포함한 편의 시설을 갖춘 호텔

  • '맵다'라는 표현이 들어간 음식 평론가 리뷰

이 가이드에서는 다음 연산자 유형의 예를 통해 빌더를 사용하는 방법을 보여줍니다.

  • 비교

  • 논리

  • 배열

  • 요소

  • 평가

  • 비트 단위

  • 지리 공간

Filters 클래스는 모든 MongoDB 쿼리 연산자에 대한 정적 팩토리 메서드를 제공합니다. 각 메서드는 쿼리 필터가 필요한 모든 메서드에 전달할 수 있는 BSON 유형의 인스턴스를 반환합니다.

간결하게 하기 위해 필터 의 모든 메서드를 가져오도록 선택할 수 있습니다. 클래스를 정적으로 생성합니다.

import static com.mongodb.client.model.Filters.*;

다음 예제에서는 이 정적 가져오기를 가정합니다.

이 가이드의 필터 예제에서는 다음 샘플 컬렉션을 사용합니다:

컬렉션: paint_purchases

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
{ "_id": 7, "color": "green", "qty": 8,"vendor": ["B", "C"] }
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

컬렉션: binary_numbers

{ "_id": 9, "a": 54, "binaryValue": "00110110" }
{ "_id": 10, "a": 20, "binaryValue": "00010100" }
{ "_id": 11, "a": 68, "binaryValue": "1000100" }
{ "_id": 12, "a": 102, "binaryValue": "01100110" }

컬렉션: geo_points

{ "_id": 13, "coordinates": { "type": "Point", "coordinates": [2.0, 2.0] } }
{ "_id": 14, "coordinates": { "type": "Point", "coordinates": [5.0, 6.0] } }
{ "_id": 15, "coordinates": { "type": "Point", "coordinates": [1.0, 3.0] } }
{ "_id": 16, "coordinates": { "type": "Point", "coordinates": [4.0, 7.0] } }

비교 필터에는 문서의 값을 지정된 값과 비교하는 모든 연산자가 포함됩니다.

비교 연산자 메서드에는 다음이 포함됩니다.

비교 메서드
경기
eq()
지정된 값과 동일한 값.
값을 지정된 값보다 크게 설정합니다.
지정된 값과 더 크거나 동일한 값.
지정된 값보다 더 작은 값.
지정된 값보다 더 작거나 동일한 값.
지정된 값과 같지 않은 값입니다.
배열에 지정된 값 중 하나
배열에 지정된 값이 없습니다.
모든 문서.

다음 예제에서는 paint_purchases 컬렉션에서 qty 필드 값이 '5'인 모든 문서와 일치하는 필터를 만듭니다:

Bson equalComparison = eq("qty", 5);
collection.find(equalComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

다음 예제에서는 paint_purchases 컬렉션에서 qty 필드의 값이 '10'보다 크거나 같은 모든 문서와 일치하는 필터를 만듭니다.

Bson gteComparison = gte("qty", 10);
collection.find(gteComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }

다음 예제에서는 조건자(predicate)가 비어 있으므로 paint_purchases 컬렉션의 모든 문서와 일치하는 필터를 만듭니다.

Bson emptyComparison = empty();
collection.find(emptyComparison).forEach(doc -> System.out.println(doc.toJson()));

이전 쿼리의 출력은 컬렉션의 모든 문서로 구성됩니다.

{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] }
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] }
...

논리 연산자는 지정된 메서드의 조건에 따라 논리 연산을 수행합니다.

논리 연산자 메서드에는 다음이 포함됩니다.

로직 메서드(Logical Method)
경기
모든 필터의 조건이 적용된 문서. 이 연산자는 AND 로직으로 필터를 결합합니다.
문서에 두 필터의 조건을 모두 적용합니다. 이 연산자는 논리 OR(으)로 필터를 결합합니다.
필터와 일치하지 않는 문서
두 필터 모두에 일치하지 않는 문서입니다. 이 연산자는 논리적 NOR으로 필터를 결합합니다.

다음 예제에서는 paint_purchases 컬렉션에서 qty 필드 값이 '8'보다 크거나 color 필드 값이 'pink'인 문서와 일치하는 필터를 만듭니다.

Bson orComparison = or(gt("qty", 8), eq("color", "pink"));
collection.find(orComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

배열 연산자는 문서의 배열 필드를 평가합니다.

배열 연산자 메서드는 다음과 같습니다.

배열 메서드
경기
배열 필드에 쿼리에 지정된 모든 요소가 포함된 경우 문서입니다.
배열 필드의 요소가 지정된 모든 조건과 일치하는 문서.
배열 필드가 지정된 수의 요소인 경우 문서입니다.

다음 예시는 paint_purchases collection에 'A'와 'D'가 모두 포함된 vendors 배열이 있는 문서와 일치합니다.

List<String> search = Arrays.asList("A", "D");
Bson allComparison = all("vendor", search);
collection.find(allComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

요소 연산자는 지정된 필드의 특성을 평가합니다.

요소 연산자 메서드에는 다음이 포함됩니다.

요소 메서드
경기
지정된 필드가 있는 문서.
필드가 지정된 유형인 문서.

다음 예제는 paint_purchases 컬렉션에서 qty 필드의 값이 '5'나 '8'이 아닌 문서를 일치합니다.

Bson existsComparison = and(exists("qty"), nin("qty", 5, 8));
collection.find(existsComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"]}
{ "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }

평가 연산자는 문서에 있는 모든 필드의 값을 평가합니다.

평가 연산자 메서드는 다음을 포함합니다:

평가 방법
경기
필드 값에 대한 모듈로 연산이 지정된 결과를 생성하는 문서입니다.
값에 지정된 일반 표현식이 포함된 문서.
지정된 전체 텍스트 검색 표현식을 포함하는 문서.
지정된 JavaScript 표현식이 포함된 문서.

다음 예시는 paint_purchases collection에 문자 'p'로 시작하는 color 필드가 있는 문서와 일치합니다.

Bson regexComparison = regex("color", "^p");
collection.find(regexComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] }
{ "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }

비트 연산자는 숫자를 2진 값으로 변환하여 비트를 평가합니다.

비트 연산자 메서드에는 다음이 포함됩니다:

비트(Bitwise) 메서드
경기
필드의 지정된 비트가 설정된 문서(즉, '1').
필드의 지정된 비트가 해제된 문서(즉, '0').
필드의 지정된 비트 중 하나 이상이 설정된 문서(즉, '1').
필드의 지정된 비트 중 하나 이상이 명확한 문서(즉, "0")입니다.

다음 예제에서는 해당 비트 마스크 '34'의 위치에 비트가 설정된 bitField 필드가 있는 문서를 일치합니다(즉, '00100010') 검색 대상은 binary_numbers 컬렉션 입니다.

Bson bitsComparison = bitsAllSet("a", 34);
collection.find(bitsComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 9, "a": 54, "binaryValue": "00110110" }
{ "_id": 12, "a": 102, "binaryValue": "01100110" }

지리 공간적 연산자는 지정된 좌표와 모양 또는 위치와의 관계를 평가합니다.

지리 공간적 연산자 메서드에는 다음이 포함됩니다:

지리 공간적 메서드
경기
GeoJSON 도형(geometry) 값이 GeoJSON 도형 경계 내에 속하는 문서입니다.
지정된 상자 내에 존재하는 좌표 값이 포함된 문서입니다.
지정된 다각형 내에 존재하는 좌표 값을 포함하는 문서입니다.
지정된 원 안에 존재하는 좌표 값이 포함된 문서입니다.
구형 도형을 사용하는 지정된 원 내에 존재하는 지리 공간적 데이터 값(GeoJSON 또는 레거시 좌표 쌍)을 포함하는 도형입니다.
GeoJSON 도형과 교차하는 도형입니다. 2dsphere 인덱스는 $geoIntersects을 지원합니다.
지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. 2dsphere2d 인덱스는 $near를 지원합니다.
구체의 한 지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. 2dsphere2d 인덱스는 $nearSphere를 지원합니다.

다음 예에서는 point 필드에 geo_points 컬렉션의 지정된 다각형에 속하는 GeoJSON 도형이 포함된 문서와 일치하는 필터를 만듭니다.

Polygon square = new Polygon(Arrays.asList(new Position(0, 0),
new Position(4, 0),
new Position(4, 4),
new Position(0, 4),
new Position(0, 0)));
// Prints documents that contain "coordinates" values that are within the bounds of the polygon passed as the filter parameter
Bson geoWithinComparison = geoWithin("coordinates", square);
collection.find(geoWithinComparison).forEach(doc -> System.out.println(doc.toJson()));

다음은 앞선 쿼리의 출력입니다:

{ "_id": 13, "coordinates": {"type": "Point", "coordinates": [2.0, 2.0]} }
{ "_id": 15, "coordinates": {"type": "Point", "coordinates": [1.0, 3.0]} }
← 집계 빌더