빌더와의 운영
개요
이 가이드 에서는 작업에 사용되는 빌더 클래스 를 생성하기 위해 PHP 라이브러리가 제공하는 유형에 대해 학습 수 있습니다. 애그리게이션 빌더 기능 의 빌더 클래스 및 팩토리 메서드를 사용하여 찾기, 업데이트 및 삭제 작업과 같은 다른 작업에 대한 필터를 생성할 수 있습니다. 애그리게이션 빌더에 대해 자세히 학습하려면 애그리게이션 가이드의 애그리게이션 빌더 섹션을 참조하세요.
빌더 사용하여 쿼리를 만들면 컴파일 타임에 오류를 식별하고 런타임에 오류를 방지하는 데 도움이 됩니다. 이 가이드 다음 작업을 수행하는 데 사용할 수 있는 빌더 클래스에 대한 정보를 제공합니다.
참고
작업 옵션 설정
동등한 집계 단계에는 팩토리 메서드를 사용하여 옵션을 지정할 수 없습니다. 예시 를 들어 Stage::limit()
메서드를 사용하여 찾기 작업에 반환된 문서 제한을 설정하다 수 없습니다. 다음 코드에 표시된 대로 문자열 기반 구문을 사용하여 옵션을 지정해야 합니다.
$options = [ 'limit' => 5, '<option name>' => '<specification>', ];
이 가이드 비애그리게이션 작업에서 빌더 사용하는 방법의 예를 제공합니다. 집계 예제를 보려면 애그리게이션으로 데이터 변환 가이드를 참조하세요.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 의
sample_geospatial
데이터베이스 에 있는 shipwrecks
컬렉션 을 사용합니다. PHP 애플리케이션 에서 이 컬렉션 에 액세스 하려면 Atlas cluster 에 연결하는 MongoDB\Client
를 인스턴스화하고 $collection
변수에 다음 값을 할당합니다.
$collection = $client->sample_geospatial->shipwrecks;
무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기 가이드 를 참조하세요.
빌더 클래스 가져오기
이 가이드 의 예제를 실행 하려면 다음 클래스를 애플리케이션 으로 가져와야 합니다.
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Query; use MongoDB\Builder\Stage;
필터 만들기
Query
빌더 클래스의 팩토리 메서드를 사용하여 찾기, 업데이트 및 삭제 작업에 사용할 필터하다 정의를 만들 수 있습니다. Query::query()
팩토리 메서드를 사용하여 쿼리를 만들 때는 명명된 인수 구문을 사용하고 유형 안전성을 구현 . 필터 만들기에 대해 자세히 학습 쿼리 지정 가이드 참조하세요.
다음 단계에서는 빌더 사용하여 필터하다 정의를 만드는 방법을 설명합니다.
Query::query()
메서드를 호출하여 쿼리 만듭니다.필터하다 할 필드 이름과
Query
클래스의 팩토리 메서드를 전달합니다. 필터하다 에 하나 이상의 필드 이름 및 기준 쌍을 전달하여 여러 절을 적용 할 수 있습니다.
다음 코드는 빌더 사용하여 필터하다 정의를 생성하는 템플릿을 보여줍니다.
$filter = Query::query( <field name>: Query::<factory method>(<parameters>), <field name>: Query::<factory method>(<parameters>), ... );
논리적 쿼리 연산자($and
, $or
, $not
, $nor
)를 사용하여 쿼리 기준을 결합하려면 다음 쿼리 템플릿을 사용할 수 있습니다.
$filter = Query::<logical operator>( Query::query(<field name>: Query::<factory method>(<parameters>)), Query::query(<field name>: Query::<factory method>(<parameters>)), ... );
자세한 학습 은 MongoDB Server 매뉴얼의 논리 쿼리 연산자 를 참조하세요.
다음 섹션에서는 빌더 사용하여 다양한 작업에 대한 필터하다 정의를 생성하는 예를 제공합니다.
조회 예시
이 예에서는 다음 조치를 수행합니다.
Query::eq()
팩토리 메서드를 사용하여feature_type
필드 값이'Wrecks - Visible'
인 문서를 일치시킵니다.Query::near()
팩토리 메서드를 사용하여coordinates
위치 필드 지정된 좌표에서10000
미터 이내에 있는 문서를 일치시킵니다.MongoDB\Collection::find()
메서드를 호출하여 일치하는 문서를 조회 .일치하는 문서를 인쇄합니다.
// Creates a query filter by using builders and // retrieves matching documents $docs = $collection->find( Query::query( feature_type: Query::eq('Wrecks - Visible'), coordinates: Query::near( Query::geometry( type: 'Point', coordinates: [-79.9, 9.3], ), maxDistance: 10000, ) ) ); // Prints matching documents foreach ($docs as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":...,"feature_type":"Wrecks - Visible","coordinates":[-79.9137115,9.3390503],...} {"_id":...,"feature_type":"Wrecks - Visible","coordinates":[-79.9357223,9.3340302],...} {"_id":...,"feature_type":"Wrecks - Visible","coordinates":[-79.9081268,9.3547792],...} // Results truncated
찾기 작업에 대해 자세히 알아보려면 데이터 검색 가이드를 참조하세요.
삭제 예시
이 예에서는 다음 조치를 수행합니다.
Query::or()
팩토리 메서드를 사용하여 다음 쿼리 절 중 하나를 충족하는 문서를 일치시킵니다.Query::regex()
팩토리 메서드를 사용하여feature_type
필드 값에'nondangerous'
문자열이 포함되어 있는지 확인하는 절Query::gt()
팩토리 메서드를 사용하여depth
필드 값이10.0
보다 큰지 확인하는 절
MongoDB\Collection::deleteOne()
메서드를 호출하여 일치하는 첫 번째 문서 삭제 .삭제된 문서 수를 출력합니다.
// Creates a query filter by using builders // and deletes the first matching document $result = $collection->deleteOne( Query::or( Query::query(feature_type: Query::regex('nondangerous$', '')), Query::query(depth: Query::gt(10.0)), ) ); // Prints number of deleted documents echo 'Deleted documents: ', $result->getDeletedCount(), PHP_EOL;
Deleted documents: 1
삭제 작업에 대해 자세히 알아보려면 문서 삭제 가이드를 참조하세요.
업데이트 문서 정의
Stage
빌더 클래스의 팩토리 메서드를 사용하여 업데이트 문서를 만들 수 있습니다. 업데이트 문서는 대상 문서에 수행할 업데이트를 설명합니다. 문서 업데이트에 대해 자세히 학습 문서 업데이트 가이드 참조하세요.
다음 단계에서는 빌더 사용하여 업데이트 문서 만드는 방법을 설명합니다.
Pipeline
인스턴스를 만듭니다.Stage::set()
와 같은Stage
클래스에서 메서드를 호출하고 필드 이름과 값을 전달하여 하나 이상의 단계를 전달합니다.
다음 코드는 빌더 사용하여 업데이트 정의하는 템플릿을 보여줍니다.
$update = new Pipeline( Stage::set(<field name>: <value>), Stage::set(<field name>: <value>), ... );
이 예에서는 다음 조치를 수행합니다.
Query::eq()
팩토리 메서드를 사용하여watlev
필드 값이'partly submerged at high water'
인 문서를 일치시킵니다.Stage::set()
메서드를 사용하여year
필드1870
(으)로 설정하다 .MongoDB\Collection::updateOne()
메서드를 호출하여 업데이트 수행합니다.업데이트된 문서 수를 인쇄합니다.
// Creates a query filter and an update document by // using builders and updates the first matching document $result = $collection->updateOne( Query::query(watlev: Query::eq('partly submerged at high water')), new Pipeline( Stage::set(year: 1870), ), ); // Prints number of updated documents echo 'Updated documents: ', $result->getModifiedCount(), PHP_EOL;
Updated documents: 1
변경 스트림 출력 수정
Stage
클래스의 팩토리 메서드를 사용하여 파이프라인 생성하여 변경 스트림의 출력을 수정할 수 있습니다. 변경 스트림에 대해 자세히 학습 데이터 변경 모니터링 가이드 참조하세요.
다음 단계에서는 빌더 사용하여 변경 스트림 필터하다 만드는 방법을 설명합니다.
배열 만듭니다.
Stage
클래스에서 팩토리 메서드와 필수 매개변수를 호출하여 하나 이상의$match
단계를 전달합니다.
다음 코드는 빌더 사용하여 변경 스트림 출력을 수정하는 템플릿을 보여줍니다.
$pipeline = [ Stage::<factory method>(...), Stage::<factory method>(...), ... ];
이 파이프라인 다음 메서드에 전달할 수 있습니다.
이 예에서는 다음 조치를 수행합니다.
Stage::match()
메서드를 사용하여 업데이트 작업에 대한 변경 이벤트만 필터하다 .Stage::project()
메서드를 사용하여operationType
,ns
(네임스페이스) 및fullDocument
필드만 출력합니다.MongoDB\Collection::watch()
메서드를 호출하여 변경 스트림 열고fullDocument
옵션을 설정하여 업데이트 후 전체 문서 출력합니다.변경 이벤트 발생 시 인쇄
// Creates a pipeline to filter for update operations and return // only specific fields $pipeline = [ Stage::match(operationType: Query::eq('update')), Stage::project(operationType: 1, ns: 1, fullDocument: 1), ]; // Opens the change stream $changeStream = $collection->watch( $pipeline, ['fullDocument' => MongoDB\Operation\Watch::FULL_DOCUMENT_UPDATE_LOOKUP] ); // Prints change events based on the pipeline specifications for ($changeStream->rewind(); true; $changeStream->next()) { if (! $changeStream->valid()) { continue; } $event = $changeStream->current(); echo json_encode($event), PHP_EOL; if ($event['operationType'] === 'invalidate') { break; } }
{ "_id":..., "operationType":"update", "fullDocument":{"_id":...,"feature_type":"Wrecks - Visible",...}, "ns":{"db":"sample_geospatial","coll":"shipwrecks"} }
변경 이벤트에서 제공하는 정보에 대해 자세히 학습 MongoDB Server 매뉴얼에서 변경 이벤트를 참조하세요.