diff options
author | Mathias Stearn <mathias@10gen.com> | 2010-02-09 12:30:04 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2010-02-09 12:30:58 -0500 |
commit | 611e665e478cf780ca9117e2301be860d8400d71 (patch) | |
tree | b0f6e137e5345e678b50a6156a5ebe20894a293f /jstests/sharding/findandmodify1.js | |
parent | 95fa5a3bc7e3f33dae53abe75180fba98b667f78 (diff) | |
download | mongo-611e665e478cf780ca9117e2301be860d8400d71.tar.gz |
Sharded findAndModify SHARDING-64
Diffstat (limited to 'jstests/sharding/findandmodify1.js')
-rw-r--r-- | jstests/sharding/findandmodify1.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/jstests/sharding/findandmodify1.js b/jstests/sharding/findandmodify1.js new file mode 100644 index 00000000000..774701f38eb --- /dev/null +++ b/jstests/sharding/findandmodify1.js @@ -0,0 +1,57 @@ +s = new ShardingTest( "find_and_modify_sharded" , 2 ); + +s.adminCommand( { enablesharding : "test" } ); +db = s.getDB( "test" ); +primary = s.getServer( "test" ).getDB( "test" ); +seconday = s.getOther( primary ).getDB( "test" ); + +numObjs = 20; + +s.adminCommand( { shardcollection : "test.stuff" , key : {_id:1} } ); + +for (var i=0; i < numObjs; i++){ + db.stuff.insert({_id: i}); +} + +for (var i=0; i < numObjs; i+=2){ + s.adminCommand( { split: "test.stuff" , middle : {_id: i} } ); +} + +for (var i=0; i < numObjs; i+=4){ + s.adminCommand( { movechunk : "test.stuff" , find : {_id: i} , to : seconday.getMongo().name } ); +} + +//sorted update +for (var i=0; i < numObjs; i++){ + assert.eq(db.stuff.count({a:1}), i, "1 A"); + + var out = db.stuff.findAndModify({query: {a:null}, update: {$set: {a:1}}, sort: {_id:1}}); + + assert.eq(db.stuff.count({a:1}), i+1, "1 B"); + assert.eq(db.stuff.findOne({_id:i}).a, 1, "1 C"); + assert.eq(out._id, i, "1 D"); +} + +// unsorted update +for (var i=0; i < numObjs; i++){ + assert.eq(db.stuff.count({b:1}), i, "2 A"); + + var out = db.stuff.findAndModify({query: {b:null}, update: {$set: {b:1}}}); + + assert.eq(db.stuff.count({b:1}), i+1, "2 B"); + assert.eq(db.stuff.findOne({_id:out._id}).a, 1, "2 C"); +} + +//sorted remove (no query) +for (var i=0; i < numObjs; i++){ + assert.eq(db.stuff.count(), numObjs - i, "3 A"); + assert.eq(db.stuff.count({_id: i}), 1, "3 B"); + + var out = db.stuff.findAndModify({remove: true, sort: {_id:1}}); + + assert.eq(db.stuff.count(), numObjs - i - 1, "3 C"); + assert.eq(db.stuff.count({_id: i}), 0, "3 D"); + assert.eq(out._id, i, "3 E"); +} + +s.stop(); |