From d0e149b84b21a869a331b09d49c98f80c494021d Mon Sep 17 00:00:00 2001 From: "richard.deavila" Date: Sun, 5 Mar 2023 17:29:49 -0800 Subject: [PATCH] Merge pull request #12737 from Automattic/vkarpov15/gh-12654 fix(schema): copy indexes when calling `add()` with schema instance --- lib/helpers/schema/merge.js | 1 + test/schema.test.js | 10 ++++++++++ 2 files changed, 11 insertions(+) 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 } });