지도 기능 문제 해결
이 페이지의 내용
참고
맵 리듀스의 대안으로서의 집계 파이프라인
MongoDB 5.0 부터 맵 리듀스 는 더 이상 사용되지 않습니다.
맵 리듀스 대신 집계 파이프라인을 사용해야 합니다. 집계 파이프라인은 맵 리듀스보다 성능과 유용성 측면에서 더 우수합니다.
4}
$group
$merge
, 등과 같은 집계 파이프라인 단계를 사용하여 맵 축소 연산을 다시 작성할 수 있습니다.사용자 지정 기능이 필요한 맵 리듀스 작업의 경우
$accumulator
및$function
집계 연산자를 사용할 수 있습니다. 이러한 연산자를 사용하여 JavaScript에서 사용자 지정 집계 표현식을 정의할 수 있습니다.
맵 리듀스 대안으로서의 집계 파이프라인 예시는 다음을 참조하세요.
또한 집계 파이프라인 은 맵 리듀스 작업보다 문제를 해결하기 쉽습니다.
map
함수는 값을 키와 연결하거나 '매핑'하고 맵 리듀스 작업 중에 키와 값 쌍을 내보내는 JavaScript 함수입니다.
키 및 값 쌍 확인
map
함수에서 발생하는 key
및 value
쌍을 확인하려면 emit
함수를 직접 작성하세요.
다음 프로토타입의 문서가 포함된 collection orders
을 가정해 보겠습니다.
{ _id: ObjectId("50a8240b927d5d8b5891743c"), cust_id: "abc123", ord_date: new Date("Oct 04, 2012"), status: 'A', price: 250, items: [ { sku: "mmm", qty: 5, price: 2.5 }, { sku: "nnn", qty: 5, price: 2.5 } ] }
각 문서에 대해
price
을cust_id
에 매핑하고cust_id
및price
쌍을 방출하는map
함수를 정의합니다.var map = function() { emit(this.cust_id, this.price); }; 키와 값을 출력하는
emit
함수를 정의합니다:var emit = function(key, value) { print("emit"); print("key: " + key + " value: " + tojson(value)); } orders
collection의 단일 문서를 사용하여map
함수를 호출합니다.var myDoc = db.orders.findOne( { _id: ObjectId("50a8240b927d5d8b5891743c") } ); map.apply(myDoc); 키와 값 쌍이 예상한 대로인지 확인합니다.
emit key: abc123 value:250 orders
collection의 여러 문서를 사용하여map
함수를 호출합니다.var myCursor = db.orders.find( { cust_id: "abc123" } ); while (myCursor.hasNext()) { var doc = myCursor.next(); print ("document _id= " + tojson(doc._id)); map.apply(doc); print(); } 키와 값 쌍이 예상한 대로인지 확인합니다.
팁
다음도 참조하세요.
map
함수는 다양한 요구 사항을 충족해야 합니다. map
함수에 대한 모든 요구 사항 목록은 mapReduce
또는 mongosh
헬퍼 메서드 db.collection.mapReduce()
를 참조하세요.