diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-04-14 17:29:53 -0400 |
---|---|---|
committer | Tess Avitabile <tess.avitabile@mongodb.com> | 2017-04-17 17:54:51 -0400 |
commit | 114c13e0318bb9b360ccf7a8943eff4bdc5a5cd1 (patch) | |
tree | 87b1ac9200f61d199b5ba9d52ac1f861d5fba6b7 /jstests | |
parent | 4185dafcbe40b7c8fa194ee0c36422293f58be7a (diff) | |
download | mongo-114c13e0318bb9b360ccf7a8943eff4bdc5a5cd1.tar.gz |
SERVER-28577 Extend mongos update implementation to accept an arrayFilters parameter
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/core/update_arrayFilters.js | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/jstests/core/update_arrayFilters.js b/jstests/core/update_arrayFilters.js index 085284ea66c..4271eb8cddb 100644 --- a/jstests/core/update_arrayFilters.js +++ b/jstests/core/update_arrayFilters.js @@ -11,19 +11,19 @@ if (db.getMongo().writeMode() !== "commands") { assert.throws(function() { - coll.update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); + coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); }); } else { // Non-array arrayFilters fails to parse. - assert.writeError(coll.update({}, {$set: {a: 5}}, {arrayFilters: {i: 0}}), + assert.writeError(coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: {i: 0}}), ErrorCodes.TypeMismatch); // Non-object array filter fails to parse. - assert.writeError(coll.update({}, {$set: {a: 5}}, {arrayFilters: ["bad"]}), + assert.writeError(coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: ["bad"]}), ErrorCodes.TypeMismatch); // Bad array filter fails to parse. - let res = coll.update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0, j: 0}]}); + let res = coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0, j: 0}]}); assert.writeError(res, ErrorCodes.FailedToParse); assert.neq(-1, res.getWriteError().errmsg.indexOf( @@ -31,7 +31,7 @@ "update failed for a reason other than failing to parse array filters"); // Multiple array filters with the same id fails to parse. - res = coll.update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}, {j: 0}, {i: 1}]}); + res = coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}, {j: 0}, {i: 1}]}); assert.writeError(res, ErrorCodes.FailedToParse); assert.neq( -1, @@ -40,7 +40,7 @@ "update failed for a reason other than multiple array filters with the same top-level field name"); // Good value for arrayFilters succeeds. - assert.writeOK(coll.update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}, {j: 0}]})); + assert.writeOK(coll.update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}, {j: 0}]})); } // @@ -49,34 +49,34 @@ // Non-array arrayFilters fails to parse. assert.throws(function() { - coll.findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: {i: 0}}); + coll.findAndModify({query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: {i: 0}}); }); // Non-object array filter fails to parse. assert.throws(function() { - coll.findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: ["bad"]}); + coll.findAndModify({query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: ["bad"]}); }); // arrayFilters option not allowed with remove=true. assert.throws(function() { - coll.findAndModify({query: {}, remove: true, arrayFilters: [{i: 0}]}); + coll.findAndModify({query: {_id: 0}, remove: true, arrayFilters: [{i: 0}]}); }); // Bad array filter fails to parse. assert.throws(function() { - coll.findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0, j: 0}]}); + coll.findAndModify({query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0, j: 0}]}); }); // Multiple array filters with the same id fails to parse. assert.throws(function() { coll.findAndModify( - {query: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}, {j: 0}, {i: 1}]}); + {query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}, {j: 0}, {i: 1}]}); }); // Good value for arrayFilters succeeds. - assert.eq( - null, - coll.findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}, {j: 0}]})); + assert.eq(null, + coll.findAndModify( + {query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}, {j: 0}]})); // // Tests for the bulk API. @@ -101,12 +101,12 @@ // updateOne(). bulk = coll.initializeUnorderedBulkOp(); - bulk.find({}).arrayFilters("bad").updateOne({$set: {a: 5}}); + bulk.find({_id: 0}).arrayFilters("bad").updateOne({$set: {a: 5}}); assert.throws(function() { bulk.execute(); }); bulk = coll.initializeUnorderedBulkOp(); - bulk.find({}).arrayFilters([{i: 0}]).updateOne({$set: {a: 5}}); + bulk.find({_id: 0}).arrayFilters([{i: 0}]).updateOne({$set: {a: 5}}); assert.writeOK(bulk.execute()); } @@ -116,20 +116,20 @@ // findOneAndUpdate(). assert.throws(function() { - coll.findOneAndUpdate({}, {$set: {a: 5}}, {arrayFilters: "bad"}); + coll.findOneAndUpdate({_id: 0}, {$set: {a: 5}}, {arrayFilters: "bad"}); }); - assert.eq(null, coll.findOneAndUpdate({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]})); + assert.eq(null, coll.findOneAndUpdate({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]})); // updateOne(). if (db.getMongo().writeMode() !== "commands") { assert.throws(function() { - coll.updateOne({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); + coll.updateOne({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); }); } else { assert.throws(function() { - coll.updateOne({}, {$set: {a: 5}}, {arrayFilters: "bad"}); + coll.updateOne({_id: 0}, {$set: {a: 5}}, {arrayFilters: "bad"}); }); - let res = coll.updateOne({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); + let res = coll.updateOne({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); assert.eq(0, res.modifiedCount); } @@ -150,15 +150,15 @@ if (db.getMongo().writeMode() !== "commands") { assert.throws(function() { coll.bulkWrite( - [{updateOne: {filter: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]}}]); + [{updateOne: {filter: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]}}]); }); } else { assert.throws(function() { coll.bulkWrite( - [{updateOne: {filter: {}, update: {$set: {a: 5}}, arrayFilters: "bad"}}]); + [{updateOne: {filter: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: "bad"}}]); }); let res = coll.bulkWrite( - [{updateOne: {filter: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]}}]); + [{updateOne: {filter: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]}}]); assert.eq(0, res.matchedCount); } @@ -185,19 +185,21 @@ // update(). if (db.getMongo().writeMode() !== "commands") { assert.throws(function() { - coll.explain().update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); + coll.explain().update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]}); }); } else { assert.throws(function() { - coll.explain().update({}, {$set: {a: 5}}, {arrayFilters: "bad"}); + coll.explain().update({_id: 0}, {$set: {a: 5}}, {arrayFilters: "bad"}); }); - assert.commandWorked(coll.explain().update({}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]})); + assert.commandWorked( + coll.explain().update({_id: 0}, {$set: {a: 5}}, {arrayFilters: [{i: 0}]})); } // findAndModify(). assert.throws(function() { - coll.explain().findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: "bad"}); + coll.explain().findAndModify( + {query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: "bad"}); }); - assert.commandWorked( - coll.explain().findAndModify({query: {}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]})); + assert.commandWorked(coll.explain().findAndModify( + {query: {_id: 0}, update: {$set: {a: 5}}, arrayFilters: [{i: 0}]})); })();
\ No newline at end of file |