개요
이 가이드 에서는 대량 쓰기 (write) 작업 을 사용하여 단일 데이터베이스 호출에서 여러 쓰기 (write) 작업을 수행하는 방법에 학습 설명합니다.
컬렉션 에 문서 를 삽입하고 다른 여러 문서를 업데이트 한 다음 문서 를 삭제 하려는 시나리오를 가정해 보겠습니다. 개별 메서드를 사용하는 경우 각 작업에는 자체 데이터베이스 호출이 필요합니다. 대신 대량 작업을 사용하여 데이터베이스 에 대한 호출 수를 줄일 수 있습니다.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 의 sample_restaurants 데이터베이스 에 있는 restaurants 컬렉션 을 사용합니다. PHP 애플리케이션 에서 이 컬렉션 에 액세스 하려면 Atlas cluster 에 연결하는 MongoDB\Client 를 인스턴스화하고 $collection 변수에 다음 값을 할당합니다.
$collection = $client->sample_restaurants->restaurants;
무료 MongoDB Atlas 클러스터 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기를 참조하세요.
대량 작업
대량 쓰기 (write) 작업을 실행 하려면 쓰기 (write) 작업 배열 을 MongoDB\Collection::bulkWrite() 메서드에 전달합니다. 쓰기 (write) 작업을 지정하려면 다음 구문을 사용합니다.
[ [ 'deleteMany' => [ $filter ] ], [ 'deleteOne' => [ $filter ] ], [ 'insertOne' => [ $document ] ], [ 'replaceOne' => [ $filter, $replacement, $options ] ], [ 'updateMany' => [ $filter, $update, $options ] ], [ 'updateOne' => [ $filter, $update, $options ] ], ]
팁
삭제, 삽입, 대체 및 업데이트 작업에 대해 자세히 학습하려면 CRUD 작업을 참조하세요.
bulkWrite() 메서드를 호출하면 라이브러리는 배열 에 지정된 순서대로 쓰기 (write) 작업을 자동으로 실행합니다. 쓰기 (write) 작업을 임의의 순서로 실행 하도록 bulkWrite() 에 지시하는 방법을 학습 대량 쓰기 동작 수정을 참조하세요.
예시
이 예시 에서는 restaurants 컬렉션 에서 다음 쓰기 (write) 작업을 실행합니다.
name값이'Mongo's Deli'인 문서 를 삽입하는 삽입 작업name값이'Mongo's Deli'인 문서 의cuisine필드 를 업데이트 하는 업데이트 작업 입니다.borough값이'Manhattan'인 모든 문서를 삭제 하는 삭제 작업 입니다.
$result = $collection->bulkWrite( [ [ 'insertOne' => [ ['name' => 'Mongo\'s Deli'], ['cuisine' => 'Sandwiches'], ['borough' => 'Manhattan'], ['restaurant_id' => '1234'], ], ], [ 'updateOne' => [ ['name' => 'Mongo\'s Deli'], ['$set' => ['cuisine' => 'Sandwiches and Salads']], ], ], [ 'deleteMany' => [ ['borough' => 'Manhattan'], ], ], ], );
대량 쓰기 동작 수정
옵션 값을 매개 변수로 지정하는 배열 을 전달하여 MongoDB\Collection::bulkWrite() 메서드의 동작을 수정할 수 있습니다. 다음 표에서는 배열 에서 설정하다 수 있는 옵션에 대해 설명합니다.
옵션 | 설명 |
|---|---|
| 작업이 문서 유효성 검사 우회할지 여부를 지정합니다. 이를 통해 스키마 유효성 검사 요구 사항(있는 경우)을 충족하지 않는 문서를 수정할 수 있습니다. 스키마 유효성 검사 에 대한 자세한 내용은 MongoDB Server 매뉴얼의 스키마 유효성 검사 참조하세요. |
| 문서 인코딩 또는 디코딩에 사용할 코덱을 설정합니다. 대량 쓰기는 |
| 작업에 대한 쓰기 고려 (write concern) 설정합니다. 자세한 내용은 MongoDB Server 매뉴얼의 쓰기 고려를 참조하세요. |
| 작업 가독성을 높이기 위해 값 목록이 포함된 문서 지정합니다. 값은 문서 필드를 참조하지 않는 상수 또는 닫힌 표현식이어야 합니다. 자세한 내용은 MongoDB Server 매뉴얼의 let 성명서 참조하세요. |
| 로 설정하다 |
| 작업에 주석을 첨부합니다. 자세한 내용은 MongoDB Server 매뉴얼의 명령 필드 삽입 가이드 참조하세요. |
| 작업과 연결할 클라이언트 세션을 지정합니다. |
다음 예시 에서는 bulkWrite() 메서드를 호출하여 삽입 및 삭제 작업을 수행하고 ordered 옵션을 false 로 설정합니다.
$result = $collection->bulkWrite( [ [ 'insertOne' => [ ['name' => 'Mongo\'s Pizza'], ['cuisine' => 'Italian'], ['borough' => 'Queens'], ['restaurant_id' => '5678'], ], ], [ 'deleteOne' => [ ['restaurant_id' => '5678'], ], ], ], ['ordered' => false], );
라이브러리가 삽입 작업을 먼저 실행하면 문서 하나가 삭제됩니다. 삭제 작업을 먼저 실행하면 문서가 삭제되지 않습니다.
참고
순서가 지정되지 않은 대량 작업은 실행 순서가 보장되지 않습니다. 이 순서는 런타임을 최적화하기 위해 나열한 방식과 다를 수 있습니다.
반환 값
MongoDB\Collection::bulkWrite() 메서드는 MongoDB\BulkWriteResult 객체 를 반환합니다. 이 클래스에는 다음과 같은 멤버 함수가 포함되어 있습니다.
기능 | 설명 |
|---|---|
| 삭제된 문서 수를 반환합니다(있는 경우). |
| 삽입된 문서 수를 반환합니다(있는 경우). |
| 삽입된 문서(있는 경우)에 대한 |
| 해당하는 경우 업데이트 및 바꾸기 작업 중에 일치하는 문서 수를 반환합니다. |
| 수정된 문서 수를 반환합니다(있는 경우). |
| 업서트된 문서 수(있는 경우)를 반환합니다. |
| 업서트된 문서(있는 경우)에 대한 |
| 대량 작업이 승인되었는지 여부를 나타내는 부울을 반환합니다. |
추가 정보
개별 쓰기 작업을 수행하는 방법을 알아보려면 다음 가이드를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.