diff options
Diffstat (limited to 'jstests/core/mr2.js')
-rw-r--r-- | jstests/core/mr2.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/jstests/core/mr2.js b/jstests/core/mr2.js new file mode 100644 index 00000000000..c15d8abdfae --- /dev/null +++ b/jstests/core/mr2.js @@ -0,0 +1,83 @@ + + +t = db.mr2; +t.drop(); + +t.save( { comments : [ { who : "a" , txt : "asdasdasd" } , + { who : "b" , txt : "asdasdasdasdasdasdas" } ] } ); + +t.save( { comments : [ { who : "b" , txt : "asdasdasdaaa" } , + { who : "c" , txt : "asdasdasdaasdasdas" } ] } ); + + + +function m(){ + for ( var i=0; i<this.comments.length; i++ ){ + var c = this.comments[i]; + emit( c.who , { totalSize : c.txt.length , num : 1 } ); + } +} + +function r( who , values ){ + var n = { totalSize : 0 , num : 0 }; + for ( var i=0; i<values.length; i++ ){ + n.totalSize += values[i].totalSize; + n.num += values[i].num; + } + return n; +} + +function reformat( r ){ + var x = {}; + var cursor; + if ( r.results ) + cursor = r.results; + else + cursor = r.find(); + cursor.forEach( + function(z){ + x[z._id] = z.value; + } + ); + return x; +} + +function f( who , res ){ + res.avg = res.totalSize / res.num; + return res; +} + +res = t.mapReduce( m , r , { finalize : f , out : "mr2_out" } ); +printjson( res ) +x = reformat( res ); +assert.eq( 9 , x.a.avg , "A1" ); +assert.eq( 16 , x.b.avg , "A2" ); +assert.eq( 18 , x.c.avg , "A3" ); +res.drop(); + +res = t.mapReduce( m , r , { finalize : f , out : { inline : 1 } } ); +printjson( res ) +x = reformat( res ); +assert.eq( 9 , x.a.avg , "B1" ); +assert.eq( 16 , x.b.avg , "B2" ); +assert.eq( 18 , x.c.avg , "B3" ); +res.drop(); +assert( ! ( "result" in res ) , "B4" ) + +res = t.mapReduce( m , r , { finalize : f , out : "mr2_out", jsMode: true } ); +printjson( res ) +x = reformat( res ); +assert.eq( 9 , x.a.avg , "A1" ); +assert.eq( 16 , x.b.avg , "A2" ); +assert.eq( 18 , x.c.avg , "A3" ); +res.drop(); + +res = t.mapReduce( m , r , { finalize : f , out : { inline : 5 }, jsMode: true } ); +printjson( res ) +x = reformat( res ); +assert.eq( 9 , x.a.avg , "B1" ); +assert.eq( 16 , x.b.avg , "B2" ); +assert.eq( 18 , x.c.avg , "B3" ); +res.drop(); +assert( ! ( "result" in res ) , "B4" ) + |