Files
mongo/jstests/core/update_numeric_field_name.js

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