summaryrefslogtreecommitdiff
path: root/jstests/sharding/features2.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/features2.js')
-rw-r--r--jstests/sharding/features2.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/jstests/sharding/features2.js b/jstests/sharding/features2.js
new file mode 100644
index 0000000..47fedc8
--- /dev/null
+++ b/jstests/sharding/features2.js
@@ -0,0 +1,114 @@
+// features2.js
+
+s = new ShardingTest( "features2" , 2 , 1 , 1 );
+s.adminCommand( { enablesharding : "test" } );
+
+a = s._connections[0].getDB( "test" );
+b = s._connections[1].getDB( "test" );
+
+db = s.getDB( "test" );
+
+// ---- distinct ----
+
+db.foo.save( { x : 1 } );
+db.foo.save( { x : 2 } );
+db.foo.save( { x : 3 } );
+
+assert.eq( "1,2,3" , db.foo.distinct( "x" ) , "distinct 1" );
+assert( a.foo.distinct("x").length == 3 || b.foo.distinct("x").length == 3 , "distinct 2" );
+assert( a.foo.distinct("x").length == 0 || b.foo.distinct("x").length == 0 , "distinct 3" );
+
+assert.eq( 1 , s.onNumShards( "foo" ) , "A1" );
+
+s.shardGo( "foo" , { x : 1 } , { x : 2 } , { x : 3 } );
+
+assert.eq( 2 , s.onNumShards( "foo" ) , "A2" );
+
+assert.eq( "1,2,3" , db.foo.distinct( "x" ) , "distinct 4" );
+
+// ----- delete ---
+
+assert.eq( 3 , db.foo.count() , "D1" );
+
+db.foo.remove( { x : 3 } );
+assert.eq( 2 , db.foo.count() , "D2" );
+
+db.foo.save( { x : 3 } );
+assert.eq( 3 , db.foo.count() , "D3" );
+
+db.foo.remove( { x : { $gt : 2 } } );
+assert.eq( 2 , db.foo.count() , "D4" );
+
+db.foo.remove( { x : { $gt : -1 } } );
+assert.eq( 0 , db.foo.count() , "D5" );
+
+db.foo.save( { x : 1 } );
+db.foo.save( { x : 2 } );
+db.foo.save( { x : 3 } );
+assert.eq( 3 , db.foo.count() , "D6" );
+db.foo.remove( {} );
+assert.eq( 0 , db.foo.count() , "D7" );
+
+// --- _id key ---
+
+db.foo2.insert( { _id : new ObjectId() } );
+db.foo2.insert( { _id : new ObjectId() } );
+db.foo2.insert( { _id : new ObjectId() } );
+
+assert.eq( 1 , s.onNumShards( "foo2" ) , "F1" );
+
+s.adminCommand( { shardcollection : "test.foo2" , key : { _id : 1 } } );
+
+assert.eq( 3 , db.foo2.count() , "F2" )
+db.foo2.insert( {} );
+assert.eq( 4 , db.foo2.count() , "F3" )
+
+
+// --- map/reduce
+
+db.mr.save( { x : 1 , tags : [ "a" , "b" ] } );
+db.mr.save( { x : 2 , tags : [ "b" , "c" ] } );
+db.mr.save( { x : 3 , tags : [ "c" , "a" ] } );
+db.mr.save( { x : 4 , tags : [ "b" , "c" ] } );
+
+m = function(){
+ this.tags.forEach(
+ function(z){
+ emit( z , { count : 1 } );
+ }
+ );
+};
+
+r = function( key , values ){
+ var total = 0;
+ for ( var i=0; i<values.length; i++ ){
+ total += values[i].count;
+ }
+ return { count : total };
+};
+
+doMR = function( n ){
+ var res = db.mr.mapReduce( m , r );
+ printjson( res );
+ var x = db[res.result];
+ assert.eq( 3 , x.find().count() , "MR T1 " + n );
+
+ var z = {};
+ x.find().forEach( function(a){ z[a._id] = a.value.count; } );
+ assert.eq( 3 , Object.keySet( z ).length , "MR T2 " + n );
+ assert.eq( 2 , z.a , "MR T2 " + n );
+ assert.eq( 3 , z.b , "MR T2 " + n );
+ assert.eq( 3 , z.c , "MR T2 " + n );
+
+ x.drop();
+}
+
+doMR( "before" );
+
+assert.eq( 1 , s.onNumShards( "mr" ) , "E1" );
+s.shardGo( "mr" , { x : 1 } , { x : 2 } , { x : 3 } );
+assert.eq( 2 , s.onNumShards( "mr" ) , "E1" );
+
+doMR( "after" );
+
+s.stop();