From 7b42c15a42f787ec26d0faee074f7674eac41ca3 Mon Sep 17 00:00:00 2001 From: Valeri Karpov Date: Tue, 5 Dec 2017 22:45:52 -0800 Subject: [PATCH] fix(document): ensure projection with only $slice isn't treated as inclusive for discriminators Fix #4991 --- lib/document.js | 3 ++- test/model.discriminator.querying.test.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/document.js b/lib/document.js index dc8df23830f..188b554f296 100644 --- a/lib/document.js +++ b/lib/document.js @@ -1258,7 +1258,8 @@ Document.prototype.isSelected = function isSelected(path) { if (cur === '_id') { continue; } - if (this.$__.selected[cur] && this.$__.selected[cur].$meta) { + var projection = this.$__.selected[cur]; + if (projection && (projection.$meta || projection.$slice)) { continue; } inclusive = !!this.$__.selected[cur]; diff --git a/test/model.discriminator.querying.test.js b/test/model.discriminator.querying.test.js index 2cb3fe7cf55..69e4732a563 100644 --- a/test/model.discriminator.querying.test.js +++ b/test/model.discriminator.querying.test.js @@ -1023,13 +1023,13 @@ describe('model', function() { var Discriminator = Base.discriminator('gh4991_A1', discriminatorSchema); var obj = { propA: 'Hi', propB: 'test', array: ['a', 'b'] }; - Discriminator.create(obj, function(error, doc) { + Discriminator.create(obj, function(error) { assert.ifError(error); Base.find().slice('array', 1).exec(function(error, docs) { assert.equal(docs.length, 1); assert.equal(docs[0].propA, 'Hi'); done(); - }) + }); }); });