summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-10-11 17:55:57 -0400
committerNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-10-11 17:55:57 -0400
commit11cd6942b2ec32e9079ad1b979c6eba544beda41 (patch)
treef40388d0784ace38c0518a6ed5b5879c7f2a7d3a /jstests
parenteb8d989fd8d5b628b7e424953072a3d2ef852a1f (diff)
downloadmongo-11cd6942b2ec32e9079ad1b979c6eba544beda41.tar.gz
SERVER-37058: Update with numeric field names inside an array can cause validation to fail
Diffstat (limited to 'jstests')
-rw-r--r--jstests/core/update_numeric_field_name.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/jstests/core/update_numeric_field_name.js b/jstests/core/update_numeric_field_name.js
new file mode 100644
index 00000000000..bc165a7ca78
--- /dev/null
+++ b/jstests/core/update_numeric_field_name.js
@@ -0,0 +1,29 @@
+// 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.coll;
+ coll.drop();
+
+ assert.writeOK(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.writeErrorWithCode(coll.update({_id: 0}, {$set: {'a.0.0': 1}}), 16746);
+
+ // Verify that the indexes were not affected.
+ let res = assert.commandWorked(coll.validate(true));
+ assert(res.valid, tojson(res));
+
+ assert.writeErrorWithCode(coll.update({_id: 0}, {$set: {'a.0.0.b': 1}}), 16746);
+ res = assert.commandWorked(coll.validate(true));
+ assert(res.valid, tojson(res));
+
+ // An update which does not violate the ambiguous field name in array constraint should succeed.
+ assert.writeOK(coll.update({_id: 0}, {$set: {'a.1.b.0.0': 1}}));
+
+ res = assert.commandWorked(coll.validate(true));
+ assert(res.valid, tojson(res));
+})();