AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

필터 빌더

이 가이드 에서는 빌더 사용하여 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)
경기

모든 필터의 조건이 적용된 문서. 이 연산자는 AND 로직으로 필터를 결합합니다.

문서에 두 필터의 조건을 모두 적용합니다. 이 연산자는 논리 OR(으)로 필터를 결합합니다.

필터와 일치하지 않는 문서

두 필터 모두에 일치하지 않는 문서입니다. 이 연산자는 논리적 NOR으로 필터를 결합합니다.

다음 예시에서는 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 도형과 교차하는 도형입니다. 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)));
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]} }