필터 빌더
개요
이 가이드에서는 빌더를 사용하여 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] } }
비교
비교 필터에는 문서의 값을 지정된 값과 비교하는 모든 연산자가 포함됩니다.
비교 연산자 메서드에는 다음이 포함됩니다.
다음 예제에서는 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"] } ...
논리
논리 연산자는 지정된 메서드의 조건에 따라 논리 연산을 수행합니다.
논리 연산자 메서드에는 다음이 포함됩니다.
다음 예제에서는 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"] }
평가
평가 연산자는 문서에 있는 모든 필드의 값을 평가합니다.
평가 연산자 메서드는 다음을 포함합니다:
다음 예시는 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 을 지원합니다. | |
지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. 2dsphere 및 2d 인덱스는 $near 를 지원합니다. | |
구체의 한 지점에 근접한 지리 공간적 객체입니다. 지리 공간적 공간 인덱스가 필요합니다. 2dsphere 및 2d 인덱스는 $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]} }