문서 메뉴
문서 홈
/ / /
Ruby MongoDB Driver
/

맵 축소

맵 리듀스 는 대량의 데이터를 집계된 결과로 압축하기 위한 데이터 처리 패러다임입니다.

참고

맵 축소 작업은 더 이상 사용되지 않습니다. 애그리게이션 프레임워크 는 맵 리듀스 작업보다 더 나은 성능과 유용성을 제공하므로 신규 개발에 선호되어야 합니다.

맵 리듀스 작업은 Collection#find 메서드에서 얻은 컬렉션 뷰에서 map_reduce 메서드를 호출하여 실행됩니다. map_reduce 메서드는 매퍼, 리듀서, 맵 리듀스 옵션의 세 가지 인수를 사용합니다. 매퍼와 리듀서는 JavaScript 함수가 포함된 문자열로 제공되어야 합니다.

예를 들어, 다음과 같은 collection이 1부터 10까지의 값을 가지고 있다고 가정해 보겠습니다.

coll = client['foo']
10.times do |i|
coll.insert_one(v: i)
end

다음 호출은 6보다 작은 값을 합산합니다.

coll.find(v: {'$lt' => 6}).map_reduce(
'function() { emit(null, this.v) }',
'function(key, values) { return Array.sum(values) }',
).first['value']
# => 15.0

map_reduce 메서드는 작업에 사용할 매개변수를 보유하는 맵 리듀스 뷰인 Mongo::Collection::View::MapReduce 의 인스턴스를 반환합니다. 작업을 실행하려면 결과를 반복하거나(예: each, first 또는 to_a ) 또는 execute 메서드를 호출합니다. execute 메서드는 맵 리듀스 작업을 실행하지만 서버에서 결과 세트를 반환하지 않으며, 주로 작업 출력이 다음과 같이 collection으로 전달될 때 유용합니다.

coll.find(...).map_reduce(...).out('destination_collection').execute

참고 사항:

  • 맵 리듀스의 결과가 collection으로 전달되지 않으면 인라인으로 검색된다고 합니다. 이 경우 전체 결과 집합이 16MiB BSON 문서 크기 제한에 맞아야 합니다.

  • 맵 리듀스 결과가 collection으로 전달되고 맵 리듀스 보기가 반복되면 드라이버는 자동으로 전체 collection을 검색하고 해당 내용을 결과 집합으로 반환합니다. collection 정렬 없이 검색됩니다. 비어 있지 않은 collection에 대해 맵 리듀스를 수행하는 경우 드라이버는 맵 리듀스 작업이 완료된 후 collection에 존재하는 문서를 반환하며 여기에는 맵 리듀스 이전에 collection에 있던 문서가 포함될 수 있습니다. 작동.

coll.find(...).map_reduce(...).out('destination_collection').each do |doc|
# ...
end
coll.find(...).map_reduce(...).out(replace: 'destination_collection', db: 'db_name').each do |doc|
# ...
end

맵 리듀스 뷰가 주어지면 다음 메서드를 사용하여 구성할 수 있습니다.

메서드
설명
js_mode
작업에 대한 jsMode 플래그를 설정합니다.
out
결과 집합을 반환하는 대신 출력을 지정된 collection으로 보냅니다.
scope
작업의 범위를 설정합니다.
verbose
결과에 타이밍 정보를 포함할지 여부를 설정합니다.

다음은 view 객체에 정의된 접근자 메서드입니다.

메서드
설명
js_mode
현재 jsMode 플래그 값을 반환합니다.
map_function
지도 함수를 문자열로 반환합니다.
out
작업의 현재 출력 위치를 반환합니다.
reduce_function
reduce 함수를 문자열로 반환합니다.
scope
작업의 현재 범위를 반환합니다.
verbose
결과에 타이밍 정보를 포함할지 여부를 반환합니다.

돌아가기

집계

다음

텍스트 검색