English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB mapReduce 명령어

MongoDB 문서에 따르면, Map reduce는 대량의 데이터를 유용한 합성 결과로 압축하는 데이터 처리 패러다임입니다. MongoDB는 mapReduce 명령어를 사용하여 map reduce 작업을 수행합니다. MapReduce는 일반적으로 대형 데이터셋을 처리하는 데 사용됩니다.

MapReduce 명령어

다음은 기본 mapReduce 명령어 문법입니다-

>db.collection.mapReduce(   
function() { emit(key,value); },  //map 함수   
function(key,values) { return reduceFunction },   //reduce 함수
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

map-reduce 함수는 먼저 집합을 쿼리한 후 결과 문서를 맵핑하여 키를 발행합니다-값 쌍을 생성한 후, 여러 값을 가진 키에 따라 줄입니다.

위의 문법에서-

  • map 은 키를 값으로 맵핑하고 키를 발행하는 JavaScript 함수입니다-값 쌍

  • reduce 은 모든 같은 키를 가진 문서를 줄이거나 그룹화하는 JavaScript 함수입니다

  • out map을 지정합니다-reduce 쿼리 결과 위치를 지정합니다

  • query 문서를 선택하기 위한 선택 가능한 선택 기준을 지정합니다

  • sort 선택 가능한 정렬 조건을 지정합니다

  • limit 반환할 수 있는 선택 가능한 최대 문서 수를 지정합니다

MapReduce를 사용하여

다음과 같은 사용자 포스트를 저장하는 문서 구조를 고려해보세요. 이 문서는 사용자의 user_name와 발행 상태를 저장합니다.

{
   "post_text":3codebox는 튜토리얼에 대한 멋진 웹사이트입니다
   "user_name":
   "status":"active"
}

이제, 다음에posts집합에서 mapReduce 함수를 사용하여 모든 활성 포스트를 선택하고, user_name에 따라 그룹화한 후 다음 코드로 각 사용자의 포스트 수를 세어줍니다-

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

위의 mapReduce 쿼리는 다음 결과를 출력합니다-

{
   "result":
   "timeMillis": 9,
   "counts":
      "input": 4,
      "emit": 4,
      "reduce": 2,
      "output": 2
   ,}
   "ok": 1,}

결과를 보여주면, 총4문서가 쿼리와 일치합니다(status:"active"), map 함수가4키 값 쌍을 가진 문서가, 마지막에 reduce 함수가 같은 키를 가진 매핑 문서를 분류합니다.2개.

이 mapReduce 쿼리의 결과를 확인하려면 find 연산자를 사용하십시오-

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
).find()

위의 쿼리는 다음과 같은 결과를 반환하며, 사용자 tom과 mark이 모두 활성 상태의 두 개의 post를 가지고 있다는 것을 보여줍니다–

{	"_id"	:	"tom",	"value"	: 2 }
{	"_id"	:	"mark",	"value"	: 2 }

이와 같은 방식으로, MapReduce 쿼리는 대형 복잡한 집합 쿼리를 구성하는 데 사용될 수 있습니다. custom Javascript 함수의 사용은 MapReduce를 통해 매우 유연하며 강력합니다.