159 lines
6.0 KiB
JavaScript
159 lines
6.0 KiB
JavaScript
// Checking for positional array updates with either .$ or .0 at the end
|
|
// SERVER-7511
|
|
|
|
// array.$.name
|
|
let t = db[jsTestName()];
|
|
t.drop();
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"name": "old"}]}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({"array.name": "old"}, {$set: {"array.$.name": "new"}}));
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(!t.findOne({"array.name": "old"}));
|
|
|
|
// array.$ (failed in 2.2.2)
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"name": "old"}]}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({"array.name": "old"}, {$set: {"array.$": {"name": "new"}}}));
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(!t.findOne({"array.name": "old"}));
|
|
|
|
// array.0.name
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"name": "old"}]}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({"array.name": "old"}, {$set: {"array.0.name": "new"}}));
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(!t.findOne({"array.name": "old"}));
|
|
|
|
// array.0 (failed in 2.2.2)
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"name": "old"}]}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({"array.name": "old"}, {$set: {"array.0": {"name": "new"}}}));
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(!t.findOne({"array.name": "old"}));
|
|
|
|
// // array.12.name
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
let arr = new Array();
|
|
for (var i = 0; i < 20; i++) {
|
|
arr.push({"name": "old"});
|
|
}
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({_id: 0, "array": arr}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({_id: 0}, {$set: {"array.12.name": "new"}}));
|
|
// note: both documents now have to be in the array
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
|
|
// array.12 (failed in 2.2.2)
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
arr = new Array();
|
|
for (var i = 0; i < 20; i++) {
|
|
arr.push({"name": "old"});
|
|
}
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({_id: 0, "array": arr}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
assert.commandWorked(t.update({_id: 0}, {$set: {"array.12": {"name": "new"}}}));
|
|
// note: both documents now have to be in the array
|
|
assert(t.findOne({"array.name": "new"}));
|
|
assert(t.findOne({"array.name": "old"}));
|
|
|
|
// array.$.123a.name
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.123a.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"123a": {"name": "old"}}]}));
|
|
assert(t.findOne({"array.123a.name": "old"}));
|
|
assert.commandWorked(t.update({"array.123a.name": "old"}, {$set: {"array.$.123a.name": "new"}}));
|
|
assert(t.findOne({"array.123a.name": "new"}));
|
|
assert(!t.findOne({"array.123a.name": "old"}));
|
|
|
|
// array.$.123a
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"123a": {"name": "old"}}]}));
|
|
assert(t.findOne({"array.123a.name": "old"}));
|
|
assert.commandWorked(t.update({"array.123a.name": "old"}, {$set: {"array.$.123a": {"name": "new"}}}));
|
|
assert(t.findOne({"array.123a.name": "new"}));
|
|
assert(!t.findOne({"array.123a.name": "old"}));
|
|
|
|
// array.0.123a.name
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.123a.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"123a": {"name": "old"}}]}));
|
|
assert(t.findOne({"array.123a.name": "old"}));
|
|
assert.commandWorked(t.update({"array.123a.name": "old"}, {$set: {"array.0.123a.name": "new"}}));
|
|
assert(t.findOne({"array.123a.name": "new"}));
|
|
assert(!t.findOne({"array.123a.name": "old"}));
|
|
|
|
// array.0.123a
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"array.name": 1}));
|
|
assert.commandWorked(t.insert({"array": [{"123a": {"name": "old"}}]}));
|
|
assert(t.findOne({"array.123a.name": "old"}));
|
|
assert.commandWorked(t.update({"array.123a.name": "old"}, {$set: {"array.0.123a": {"name": "new"}}}));
|
|
assert(t.findOne({"array.123a.name": "new"}));
|
|
assert(!t.findOne({"array.123a.name": "old"}));
|
|
|
|
// a.0.b
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"a.0.b": 1}));
|
|
assert.commandWorked(t.insert({"a": [[{b: "old"}]]}));
|
|
assert(t.findOne({"a.0.0.b": "old"}));
|
|
assert(t.findOne({"a.0.b": "old"}));
|
|
assert.commandWorked(t.update({}, {$set: {"a.0.0.b": "new"}}));
|
|
assert(t.findOne({"a.0.b": "new"}));
|
|
assert(!t.findOne({"a.0.b": "old"}));
|
|
|
|
// a.0.b.c
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"a.0.b.c": 1}));
|
|
assert.commandWorked(t.insert({"a": [{b: [{c: "old"}]}]}));
|
|
assert(t.findOne({"a.0.b.0.c": "old"}));
|
|
assert(t.findOne({"a.b.0.c": "old"}));
|
|
assert(t.findOne({"a.0.b.c": "old"}));
|
|
assert(t.findOne({"a.b.c": "old"}));
|
|
assert.commandWorked(t.update({}, {$set: {"a.0.b.0.c": "new"}}));
|
|
assert(t.findOne({"a.0.b.c": "new"}));
|
|
assert(!t.findOne({"a.0.b.c": "old"}));
|
|
|
|
// a.b.$ref
|
|
t = db.jstests_update_arraymatch8;
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"a.b.$ref": 1}));
|
|
assert.commandWorked(t.insert({"a": [{"b": {"$ref": "old", "$id": 0}}]}));
|
|
assert(t.findOne({"a.b.$ref": "old"}));
|
|
assert(t.findOne({"a.0.b.$ref": "old"}));
|
|
assert.commandWorked(t.update({}, {$set: {"a.0.b.$ref": "new"}}));
|
|
assert(t.findOne({"a.b.$ref": "new"}));
|
|
assert(!t.findOne({"a.b.$ref": "old"}));
|
|
|
|
// a.b and a-b
|
|
t = db[jsTestName()];
|
|
assert(t.drop());
|
|
assert.commandWorked(t.createIndex({"a.b": 1}));
|
|
assert.commandWorked(t.createIndex({"a-b": 1}));
|
|
assert.commandWorked(t.insert({"a": {"b": "old"}}));
|
|
assert(t.findOne({"a.b": "old"}));
|
|
assert.commandWorked(t.update({}, {$set: {"a": {"b": "new"}}}));
|
|
assert(t.findOne({"a.b": "new"}));
|
|
assert(!t.findOne({"a.b": "old"}));
|