개요
이 가이드 에서는 빌더 사용하여 Java Reactive Streams 운전자 에서 쿼리에 대한 필터를 지정하는 방법을 학습 수 있습니다.
빌더는 BSON 객체를 구성하는 데 도움이 되는 Java Reactive Streams 운전자 에서 제공하는 클래스입니다. 자세한 학습 은 빌더 가이드 참조하세요.
필터는 지정된 조건을 기반으로 쿼리 결과를 제한하는 데 사용되는 작업입니다. 필터는 컬렉션의 검색 조건과 일치하는 정보를 찾는 데 유용한 도구입니다.
다음과 같은 위치에서 필터를 사용할 수 있습니다.
find()메서드에 대한 매개변수로 사용집계 파이프라인의 일치 단계에서
deleteOne()또는deleteMany()메서드에 대한 매개변수로 사용updateOne()또는updateMany()메서드에 대한 매개변수로 사용
필터를 사용한 쿼리 결과의 몇 가지 예는 다음과 같습니다.
비용 $0 이상 $25미만인 품목
글루텐이 없고 칼로리가 500 미만인 음식
'매운'이라는 표현이 포함된 음식 평론가 리뷰
이 가이드에서는 다음 연산자 유형의 예를 통해 빌더를 사용하는 방법을 보여줍니다.
클래스는 모든 MongoDB 쿼리 연산자에 대한 정적 팩토리 메서드를 제공합니다. 각 메서드는 BSON 유형의 인스턴스 반환하며, 이 인스턴스는 쿼리 필터하다 필요한 모든 메서드에 전달할 수 있습니다.Filters
팁
간결성을 위해 필터 클래스의 모든 메서드를 정적으로 가져오도록 선택할 수 있습니다.
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] } }
비교
비교 필터에는 문서의 값을 지정된 값과 비교하는 모든 연산자가 포함됩니다.
비교 연산자 메서드에는 다음이 포함됩니다.
비교 메서드 | 경기 |
|---|---|
지정된 값과 동일한 값. | |
값을 지정된 값보다 크게 설정합니다. | |
지정된 값과 더 크거나 동일한 값. | |
지정된 값보다 더 작은 값. | |
지정된 값보다 더 작거나 동일한 값. | |
지정된 값과 같지 않은 값입니다. | |
배열에 지정된 값 중 하나 | |
배열에 지정된 값이 없습니다. | |
모든 문서. |
다음 예시에서는 paint_purchases 컬렉션에서 qty 필드 값이 '5'인 모든 문서와 일치하는 필터를 만듭니다:
Bson equalComparison = eq("qty", 5); FindPublisher<Document> findPublisher = collection.find(equalComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_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); FindPublisher<Document> findPublisher = collection.find(gteComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
다음 예시에서는 조건자(predicate)가 비어 있으므로 paint_purchases 컬렉션의 모든 문서와 일치하는 필터를 만듭니다.
Bson emptyComparison = empty(); FindPublisher<Document> findPublisher = collection.find(emptyComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_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) | 경기 |
|---|---|
모든 필터의 조건이 적용된 문서. 이 연산자는 | |
문서에 두 필터의 조건을 모두 적용합니다. 이 연산자는 논리 | |
필터와 일치하지 않는 문서 | |
두 필터 모두에 일치하지 않는 문서입니다. 이 연산자는 논리적 |
다음 예시에서는 paint_purchases 컬렉션에서 qty 필드 값이 '8'보다 크거나 color 필드 값이 'pink'인 문서와 일치하는 필터를 만듭니다.
Bson orComparison = or(gt("qty", 8), eq("color", "pink")); FindPublisher<Document> findPublisher = collection.find(orComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_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'가 모두 포함된 vendor 배열이 있는 문서와 일치합니다.
List<String> search = Arrays.asList("A", "D"); Bson allComparison = all("vendor", search); FindPublisher<Document> findPublisher = collection.find(allComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }
요소
요소 연산자는 지정된 필드의 특성을 평가합니다.
요소 연산자 메서드에는 다음이 포함됩니다.
다음 예시 paint_purchases 컬렉션 에 qty 필드 와 '5' 또는 '8' 같지 않은 값이 있는 문서를 일치시킵니다.
Bson existsComparison = and(exists("qty"), nin("qty", 5, 8)); FindPublisher<Document> findPublisher = collection.find(existsComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_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"); FindPublisher<Document> findPublisher = collection.find(regexComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
비트 단위
비트 연산자는 숫자를 2진 값으로 변환하여 비트를 평가합니다.
비트 연산자 메서드에는 다음이 포함됩니다:
비트(Bitwise) 메서드 | 경기 |
|---|---|
필드의 지정된 비트가 설정된 문서(즉, '1'). | |
필드의 지정된 비트가 해제된 문서(즉, '0'). | |
필드의 지정된 비트 중 하나 이상이 설정된 문서(즉, '1'). | |
필드의 지정된 비트 중 하나 이상이 명확한 문서(즉, "0")입니다. |
다음 예시 binary_numbers 컬렉션 에서 해당 비트 마스크 '34'(즉, '00100010')의 위치에 비트가 설정하다 a 필드 있는 문서를 일치시킵니다.
Bson bitsComparison = bitsAllSet("a", 34); FindPublisher<Document> findPublisher = collection.find(bitsComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 9, "a": 54, "binaryValue": "00110110" } { "_id": 12, "a": 102, "binaryValue": "01100110" }
지리 공간
지리 공간적 연산자는 지정된 좌표와 모양 또는 위치와의 관계를 평가합니다.
지리 공간적 연산자 메서드에는 다음이 포함됩니다:
지리 공간적 메서드 | 경기 |
|---|---|
GeoJSON 도형(geometry) 값이 GeoJSON 도형 경계 내에 속하는 문서입니다. | |
지정된 상자 내에 존재하는 좌표 값이 포함된 문서입니다. | |
지정된 다각형 내에 존재하는 좌표 값을 포함하는 문서입니다. | |
지정된 원 안에 존재하는 좌표 값이 포함된 문서입니다. | |
구형 도형을 사용하는 지정된 원 내에 존재하는 지리 공간적 데이터 값(GeoJSON 또는 레거시 좌표 쌍)을 포함하는 도형입니다. | |
GeoJSON 도형과 교차하는 도형입니다. | |
지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. | |
구체의 한 지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. |
다음 예에서는 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))); Bson geoWithinComparison = geoWithin("coordinates", square); FindPublisher<Document> findPublisher = collection.find(geoWithinComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 13, "coordinates": {"type": "Point", "coordinates": [2.0, 2.0]} } { "_id": 15, "coordinates": {"type": "Point", "coordinates": [1.0, 3.0]} }