mirror of https://github.com/mongodb/mongo
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
// @tags: [
|
|
// # Cannot implicitly shard accessed collections because of following errmsg: A single
|
|
// # update/delete on a sharded collection must contain an exact match on _id or contain
|
|
// # the shard key.
|
|
// assumes_unsharded_collection,
|
|
// # The {$set: {"a.1500000": 1}} update takes multiple seconds to execute.
|
|
// operations_longer_than_stepdown_interval,
|
|
// ]
|
|
|
|
// test $set with array indicies
|
|
|
|
t = db.jstests_set7;
|
|
var res;
|
|
|
|
t.drop();
|
|
|
|
t.save({a: [0, 1, 2, 3]});
|
|
t.update({}, {$set: {"a.0": 2}});
|
|
assert.eq([2, 1, 2, 3], t.findOne().a);
|
|
|
|
t.update({}, {$set: {"a.4": 5}});
|
|
assert.eq([2, 1, 2, 3, 5], t.findOne().a);
|
|
|
|
t.update({}, {$set: {"a.9": 9}});
|
|
assert.eq([2, 1, 2, 3, 5, null, null, null, null, 9], t.findOne().a);
|
|
|
|
t.drop();
|
|
t.save({a: [0, 1, 2, 3]});
|
|
t.update({}, {$set: {"a.9": 9, "a.7": 7}});
|
|
assert.eq([0, 1, 2, 3, null, null, null, 7, null, 9], t.findOne().a);
|
|
|
|
t.drop();
|
|
t.save({a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]});
|
|
t.update({}, {$set: {"a.11": 11}});
|
|
assert.eq([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], t.findOne().a);
|
|
|
|
t.drop();
|
|
t.save({});
|
|
t.update({}, {$set: {"a.0": 4}});
|
|
assert.eq({"0": 4}, t.findOne().a);
|
|
|
|
t.drop();
|
|
t.update({"a.0": 4}, {$set: {b: 1}}, true);
|
|
assert.eq({"0": 4}, t.findOne().a);
|
|
|
|
t.drop();
|
|
t.save({a: []});
|
|
res = t.update({}, {$set: {"a.f": 1}});
|
|
assert.writeError(res);
|
|
assert.eq([], t.findOne().a);
|
|
|
|
// Test requiring proper ordering of multiple mods.
|
|
t.drop();
|
|
t.save({a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]});
|
|
t.update({}, {$set: {"a.11": 11, "a.2": -2}});
|
|
assert.eq([0, 1, -2, 3, 4, 5, 6, 7, 8, 9, 10, 11], t.findOne().a);
|
|
|
|
// Test multiple updates to a non-existent array element.
|
|
t.drop();
|
|
assert.commandWorked(t.insert({a: []}));
|
|
assert.commandWorked(t.update({}, {$set: {"a.2.b": 1, "a.2.c": 1}}));
|
|
assert.docEq({a: [null, null, {b: 1, c: 1}]}, t.findOne({}, {_id: 0}));
|
|
|
|
// Test upsert case
|
|
t.drop();
|
|
t.update({a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, {$set: {"a.11": 11}}, true);
|
|
assert.eq([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], t.findOne().a);
|
|
|
|
// SERVER-3750
|
|
t.drop();
|
|
t.save({a: []});
|
|
res = t.update({}, {$set: {"a.1500000": 1}}); // current limit
|
|
assert.commandWorked(res);
|
|
|
|
t.drop();
|
|
t.save({a: []});
|
|
res = t.update({}, {$set: {"a.1500001": 1}}); // 1 over limit
|
|
assert.writeError(res);
|
|
|
|
t.drop();
|
|
t.save({a: []});
|
|
res = t.update({}, {$set: {"a.1000000000": 1}}); // way over limit
|
|
assert.writeError(res);
|