diff --git a/lib/helpers/schema/merge.js b/lib/helpers/schema/merge.js index edc5175eedc..55ed82466f7 100644 --- a/lib/helpers/schema/merge.js +++ b/lib/helpers/schema/merge.js @@ -23,5 +23,6 @@ module.exports = function merge(s1, s2, skipConflictingPaths) { s1.virtuals[virtual] = s2.virtuals[virtual].clone(); } + s1._indexes = s1._indexes.concat(s2._indexes || []); s1.s.hooks.merge(s2.s.hooks, false); }; diff --git a/test/schema.test.js b/test/schema.test.js index d2bff3ce34e..cdaed581759 100644 --- a/test/schema.test.js +++ b/test/schema.test.js @@ -2401,6 +2401,16 @@ describe('schema', function() { assert.equal(TurboManSchema.path('year').instance, 'Number'); }); + it('copies indexes when calling add() with schema instance (gh-12654)', function() { + const ToySchema = Schema({ name: String }); + ToySchema.index({ name: 1 }); + + const TurboManSchema = Schema(); + TurboManSchema.add(ToySchema); + + assert.deepStrictEqual(TurboManSchema.indexes(), [[{ name: 1 }, { background: true }]]); + }); + describe('gh-8849', function() { it('treats `select: undefined` as not specifying `select` option', function() { const userSchema = new Schema({ name: { type: String, select: undefined } });