Docs Menu

빌더와의 운영

이 가이드 에서는 작업에 사용되는 빌더 클래스 를 생성하기 위해 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() 팩토리 메서드를 사용하여 쿼리를 만들 때는 명명된 인수 구문을 사용하고 유형 안전성을 구현 . 필터 만들기에 대해 자세히 학습 쿼리 지정 가이드 참조하세요.

다음 단계에서는 빌더 사용하여 필터하다 정의를 만드는 방법을 설명합니다.

  1. Query::query() 메서드를 호출하여 쿼리 만듭니다.

  2. 필터하다 할 필드 이름과 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 빌더 클래스의 팩토리 메서드를 사용하여 업데이트 문서를 만들 수 있습니다. 업데이트 문서는 대상 문서에 수행할 업데이트를 설명합니다. 문서 업데이트에 대해 자세히 학습 문서 업데이트 가이드 참조하세요.

다음 단계에서는 빌더 사용하여 업데이트 문서 만드는 방법을 설명합니다.

  1. Pipeline 인스턴스를 만듭니다.

  2. 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 클래스의 팩토리 메서드를 사용하여 파이프라인 생성하여 변경 스트림의 출력을 수정할 수 있습니다. 변경 스트림에 대해 자세히 학습 데이터 변경 모니터링 가이드 참조하세요.

다음 단계에서는 빌더 사용하여 변경 스트림 필터하다 만드는 방법을 설명합니다.

  1. 배열 만듭니다.

  2. 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 매뉴얼에서 변경 이벤트를 참조하세요.