diff options
author | Mathias Stearn <mathias@10gen.com> | 2009-12-30 20:08:43 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2009-12-30 20:08:43 -0500 |
commit | 225173bb31d7536b9e402145c7f65db00e2523ab (patch) | |
tree | 1127a8429f572ab5f8a3f39b911249bdfce951fc /jstests/find_and_modify.js | |
parent | 53667da6d84c5943c1b778f31c20df9a63700bde (diff) | |
download | mongo-225173bb31d7536b9e402145c7f65db00e2523ab.tar.gz |
FindAndModify command SERVER-459
Diffstat (limited to 'jstests/find_and_modify.js')
-rw-r--r-- | jstests/find_and_modify.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/jstests/find_and_modify.js b/jstests/find_and_modify.js new file mode 100644 index 00000000000..0e56ce86678 --- /dev/null +++ b/jstests/find_and_modify.js @@ -0,0 +1,38 @@ +t = db.find_and_modify; +t.drop(); + +// fill db +for(var i=1; i<=10; i++) { + t.insert({priority:i, inprogress:false, value:0}); +} + +// returns old +out = t.findAndModify({update: {$set: {inprogress: true}, $inc: {value:1}}}); +assert.eq(out.value, 0); +assert.eq(out.inprogress, false); +t.update({_id: out._id}, {$set: {inprogress: false}}); + +// returns new +out = t.findAndModify({update: {$set: {inprogress: true}, $inc: {value:1}}, 'new': true}); +assert.eq(out.value, 2); +assert.eq(out.inprogress, true); +t.update({_id: out._id}, {$set: {inprogress: false}, value:0}); + +// update highest priority +out = t.findAndModify({query: {inprogress:false}, sort:{priority:-1}, update: {$set: {inprogress: true}}}); +assert.eq(out.priority, 10); +// update next highest priority +out = t.findAndModify({query: {inprogress:false}, sort:{priority:-1}, update: {$set: {inprogress: true}}}); +assert.eq(out.priority, 9); + +// remove lowest priority +out = t.findAndModify({sort:{priority:1}, remove:true}); +assert.eq(out.priority, 1); + +// remove next lowest priority +out = t.findAndModify({sort:{priority:1}, remove:1}); +assert.eq(out.priority, 2); + +// return empty obj if no matches (drivers may handle this differently) +out = t.findAndModify({query:{no_such_field:1}, remove:1}); +assert.eq(out, {}); |