30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
// Test that update operations correctly fail if they violate the "ambiguous field name in array"
|
|
// constraint for indexes. This is designed to reproduce SERVER-37058.
|
|
(function() {
|
|
"use strict";
|
|
|
|
const coll = db.update_numeric_field_name;
|
|
coll.drop();
|
|
|
|
assert.commandWorked(coll.insert({_id: 0, 'a': [{}]}));
|
|
assert.commandWorked(coll.createIndex({'a.0.c': 1}));
|
|
|
|
// Attempt to insert a field name '0'. The first '0' refers to the first element of the array
|
|
// 'a'.
|
|
assert.commandFailedWithCode(coll.update({_id: 0}, {$set: {'a.0.0': 1}}), 16746);
|
|
|
|
// Verify that the indexes were not affected.
|
|
let res = assert.commandWorked(coll.validate({full: true}));
|
|
assert(res.valid, tojson(res));
|
|
|
|
assert.commandFailedWithCode(coll.update({_id: 0}, {$set: {'a.0.0.b': 1}}), 16746);
|
|
res = assert.commandWorked(coll.validate({full: true}));
|
|
assert(res.valid, tojson(res));
|
|
|
|
// An update which does not violate the ambiguous field name in array constraint should succeed.
|
|
assert.commandWorked(coll.update({_id: 0}, {$set: {'a.1.b.0.0': 1}}));
|
|
|
|
res = assert.commandWorked(coll.validate({full: true}));
|
|
assert(res.valid, tojson(res));
|
|
})();
|