summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2009-12-30 20:08:43 -0500
committerMathias Stearn <mathias@10gen.com>2009-12-30 20:08:43 -0500
commit225173bb31d7536b9e402145c7f65db00e2523ab (patch)
tree1127a8429f572ab5f8a3f39b911249bdfce951fc /jstests
parent53667da6d84c5943c1b778f31c20df9a63700bde (diff)
downloadmongo-225173bb31d7536b9e402145c7f65db00e2523ab.tar.gz
FindAndModify command SERVER-459
Diffstat (limited to 'jstests')
-rw-r--r--jstests/find_and_modify.js38
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, {});