MongoDB\Collection::mapReduce()
버전 1.12부터 더 이상 사용되지 않습니다.
버전 1.2에 새로 추가됨.
정의
MongoDB\Collection::mapReduce()
mapReduce 명령을 사용하면 컬렉션에 대해 맵 리듀스 애그리게이션 작업을 실행할 수 있습니다.
function mapReduce( MongoDB\BSON\JavascriptInterface $map, MongoDB\BSON\JavascriptInterface $reduce, string|array|object $out, array $options = [] ): MongoDB\MapReduceResult
매개변수
$map
: MongoDB\BSON\Javascript값을 키와 연결하거나 '매핑'하고 키 및 값 쌍을 내보내는 JavaScript 함수입니다.
참고
범위가 있는 JavaScript 인스턴스를 전달하는 것은 더 이상 사용되지 않습니다. 맵리듀스 작업의
scope
옵션에 모든 범위 변수를 넣습니다.$reduce
: MongoDB\BSON\Javascript특정 키와 연결된 모든 값을 단일 객체로 '줄이는' JavaScript 함수입니다.
참고
범위가 있는 JavaScript 인스턴스를 전달하는 것은 더 이상 사용되지 않습니다. 맵리듀스 작업의
scope
옵션에 모든 범위 변수를 넣습니다.$out
: 문자열|배열|객체- 맵 리듀스 작업의 결과를 출력할 위치를 지정합니다. collection으로 출력하거나 결과를 인라인으로 반환할 수 있습니다. 복제본 세트의 프라이머리 멤버에서는 collection이나 인라인으로 출력할 수 있지만 세컨더리에서는 인라인 출력만 가능합니다.
$options
: 배열원하는 옵션을 지정하는 배열입니다.
이름유형설명bypassDocumentValidation
부울
true
인 경우 쓰기 작업이 문서 수준 유효성 검사를 우회하도록 허용합니다. 기본값은false
입니다.이는 결과가 컬렉션으로 출력되는 경우에만 적용됩니다.
데이터 정렬
배열|객체
데이터 정렬 을 통해 사용자는 string 비교를 위한 언어별 규칙(예: 대소문자 및 악센트 표시 규칙)을 지정할 수 있습니다. 데이터 정렬을 지정할 때
locale
필드는 필수입니다. 다른 모든 데이터 정렬 필드는 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우, 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다. 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.
comment
혼합
사용자가 데이터베이스 프로파일러, currentOp 출력 및 로그를 통해 작업을 추적하는 데 도움이 되는 임의의 주석을 지정할 수 있습니다.
이 옵션은 MongoDB 4.4부터 사용할 수 있으며 이전 서버 버전에 대해 지정된 경우 실행 시 예외가 발생합니다.
버전 1.13에 새로 추가되었습니다.
마무리
reduce 메서드를 따르고 출력을 수정합니다.
범위가 있는 JavaScript 인스턴스를 전달하는 것은 더 이상 사용되지 않습니다. 맵리듀스 작업의
scope
옵션에 모든 범위 변수를 넣습니다.jsMode
부울
맵과 리듀스 함수 실행 사이에 중간 데이터를 BSON 형식으로 변환할지 여부를 지정합니다.
limit
integer
맵 함수에 입력할 수 있는 최대 문서 수를 지정합니다.
최대 시간 (MS)
integer
커서에서 작업을 처리하는 데 걸리는 누적 시간 제한(밀리초)입니다. MongoDB는 중단 지점 이후 가장 빠른 시점에 작업을 중단합니다.
쿼리
배열|객체
맵 함수에 입력된 문서를 결정하기 위해 쿼리 연산자를 사용하여 선택 기준을 지정합니다.
readConcern
읽기 설정
작업에 사용할 읽기 설정 입니다. 기본값은 컬렉션의 읽기 설정입니다.
결과가 collection에 출력될 때 이 옵션은 무시됩니다.
범위
배열|객체
맵, 리듀스 및 파이널라이즈 함수에서 액세스할 수 있는 글로벌 변수를 지정합니다.
Session
작업과 연결할 클라이언트 세션입니다.
버전 1.3에 새로 추가되었습니다.
sort
배열|객체
결과의 순서를 지정하는 정렬 사양입니다.
typeMap
배열
커서에 적용할 타입 맵으로, BSON 문서가 PHP 값으로 변환되는 방식을 결정합니다. 기본값은 컬렉션의 타입 맵입니다.
verbose
부울
결과 정보에 타이밍 정보를 포함할지 여부를 지정합니다.
쓰기 고려
Return Values
출력 메서드에 관계없이 맵 리듀스 결과를 반복할 수 있는 MongoDB\MapReduceResult
객체 (예: 인라인, 컬렉션)을 통해 IteratorAggregate 인터페이스. 또한 명령 통계에 대한 액세스 도 제공합니다.
오류/예외
옵션이 사용되지만 선택한 서버에서 지원되지 않는 경우 MongoDB\Exception\UnsupportedException
입니다(예: collation
, readConcern
, writeConcern
).
MongoDB\Exception\InvalidArgumentException
매개변수 또는 옵션의 구문 분석과 관련된 오류의 경우입니다.
MongoDB\Exception\UnexpectedValueException
서버의 명령 응답이 잘못된 경우입니다.
MongoDB\ 드라이버\Exception\RuntimeException 확장 수준의 다른 오류(예: 연결 오류).
행동
MongoDB 에서 맵 리듀스 듀스 작업은 결과를 컬렉션 에 쓰기 (write) 결과를 인라인으로 반환할 수 있습니다. 맵 리듀스 출력을 컬렉션 에 쓰기 (write) 경우 동일한 입력 컬렉션 에서 새 결과를 이전 결과와 대체, 병합 또는 축소하는 후속 맵 리듀스 작업을 수행할 수 있습니다. 자세한 내용과 예제는 맵 리듀스 및 증분 맵 리듀스 수행 을 참조하세요.
맵 리듀스 듀스 작업의 결과를 인라인 으로 반환할 때 결과 문서는 BSON 문서 크기 제한(현재 16 메가바이트) 내에 있어야 합니다.
MongoDB는 샤드 컬렉션 에서 맵 리듀스 작업을 지원합니다. 맵 리듀스 작업은 결과를 샤드 컬렉션으로 출력할 수도 있습니다. 맵 리듀스 및 샤드 컬렉션을 참조하세요.
예시
이 예제에서는 도시 인구를 사용하여 각 주의 전체 인구를 계산합니다.
$collection = (new MongoDB\Client)->test->zips; $map = new MongoDB\BSON\Javascript('function() { emit(this.state, this.pop); }'); $reduce = new MongoDB\BSON\Javascript('function(key, values) { return Array.sum(values) }'); $out = ['inline' => 1]; $populations = $collection->mapReduce($map, $reduce, $out); foreach ($populations as $pop) { var_dump($pop); };
이 경우 출력은 다음과 유사합니다:
object(stdClass)#2293 (2) { ["_id"]=> string(2) "AK" ["value"]=> float(544698) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AL" ["value"]=> float(4040587) } object(stdClass)#2293 (2) { ["_id"]=> string(2) "AR" ["value"]=> float(2350725) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AZ" ["value"]=> float(3665228) }