Files
mongo/jstests/core/query/update/update_arraymatch8.js
Zac 591928c619 SERVER-108478 JS formatted by prettier and remove clang-format (#39656)
GitOrigin-RevId: 6c8f6aded47f260aa4f7c231b17dae3302cb1e04
2025-08-21 17:27:09 +00:00

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"}));