입력 요소에서 두 번째 요소를 집계하려면 mapReduce()를 사용합니다. Map-reduce는 대용량 데이터를 유용한 집계 결과로 압축하기 위한 데이터 처리 패러다임입니다. 문서로 컬렉션을 만들자 −
> db.demo621.insert({ _id: 101, Name1: "John", Name2: "John" }); WriteResult({ "nInserted" : 1 }) > db.demo621.insert({ _id: 102, Name1: "Bob", Name2: "John" }); WriteResult({ "nInserted" : 1 }) > db.demo621.insert({ _id: 103, Name1: "Chris", Name2: "John" }); WriteResult({ "nInserted" : 1 }) > db.demo621.insert({ _id: 104, Name1: "Sam", Name2: "John" }); WriteResult({ "nInserted" : 1 })
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo621.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : 101, "Name1" : "John", "Name2" : "John" } { "_id" : 102, "Name1" : "Bob", "Name2" : "John" } { "_id" : 103, "Name1" : "Chris", "Name2" : "John" } { "_id" : 104, "Name1" : "Sam", "Name2" : "John" }
다음은 입력 요소에서 두 번째 요소를 집계하는 쿼리입니다 -
> db.demo621.mapReduce( ... function () { ... track++; ... var actualId= this._id; ... delete this._id; ... if ( track % div == 0 ) ... emit(actualId, this ); ... }, ... function() {}, ... { ... "scope": { "track": 0, "div": 2 }, ... "out": { "inline": 1 } ... } ... )
이것은 다음과 같은 출력을 생성합니다 -
{ "results" : [ { "_id" : 102, "value" : { "Name1" : "Bob", "Name2" : "John" } }, { "_id" : 104, "value" : { "Name1" : "Sam", "Name2" : "John" } } ], "timeMillis" : 48, "counts" : { "input" : 4, "emit" : 2, "reduce" : 0, "output" : 2 }, "ok" : 1 }