Skip to content

Commit b2a384e

Browse files
authored
Merge pull request #15217 from Automattic/vkarpov15/gh-15196
fix: avoid applying defaults on map embedded paths
2 parents 54326da + 180bf95 commit b2a384e

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

lib/helpers/document/applyDefaults.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ module.exports = function applyDefaults(doc, fields, exclude, hasIncludedChildre
1919
const type = doc.$__schema.paths[p];
2020
const path = type.splitPath();
2121
const len = path.length;
22+
if (path[len - 1] === '$*') {
23+
continue;
24+
}
2225
let included = false;
2326
let doc_ = doc._doc;
2427
for (let j = 0; j < len; ++j) {

test/types.map.test.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,4 +1150,33 @@ describe('Map', function() {
11501150
const doc = await CarModel.findById(car._id);
11511151
assert.deepStrictEqual(doc.owners.get('abc').toObject(), [{ name: 'Bill' }]);
11521152
});
1153+
1154+
it('handles loading and modifying map of document arrays (gh-15196)', async function() {
1155+
const schema = new Schema({
1156+
name: { type: String, required: true },
1157+
test_map: {
1158+
type: Map,
1159+
of: [{
1160+
_id: false,
1161+
num: { type: Number, required: true },
1162+
bool: { type: Boolean, required: true }
1163+
}]
1164+
}
1165+
});
1166+
const Test = db.model('Test', schema);
1167+
1168+
let doc1 = new Test({ name: 'name1', test_map: new Map() });
1169+
await doc1.save();
1170+
1171+
doc1 = await Test.findOne({ _id: doc1._id });
1172+
1173+
doc1.test_map.set('key1', []);
1174+
await doc1.save();
1175+
1176+
doc1 = await Test.findOne({ _id: doc1._id });
1177+
assert.deepStrictEqual(doc1.toObject().test_map, new Map([['key1', []]]));
1178+
1179+
doc1 = await Test.findOne({ _id: doc1._id }).lean();
1180+
assert.deepStrictEqual(doc1.test_map, { key1: [] });
1181+
});
11531182
});

0 commit comments

Comments
 (0)