diff --git a/lib/helpers/projection/isExclusive.js b/lib/helpers/projection/isExclusive.js index 8c64bc50fe2..cbf1b78787f 100644 --- a/lib/helpers/projection/isExclusive.js +++ b/lib/helpers/projection/isExclusive.js @@ -7,6 +7,10 @@ const isDefiningProjection = require('./isDefiningProjection'); */ module.exports = function isExclusive(projection) { + if (projection == null) { + return null; + } + const keys = Object.keys(projection); let ki = keys.length; let exclude = null; diff --git a/lib/helpers/query/selectPopulatedFields.js b/lib/helpers/query/selectPopulatedFields.js index 0419425d1af..82f52aa5dd5 100644 --- a/lib/helpers/query/selectPopulatedFields.js +++ b/lib/helpers/query/selectPopulatedFields.js @@ -1,5 +1,8 @@ 'use strict'; +const isExclusive = require('../projection/isExclusive'); +const isInclusive = require('../projection/isInclusive'); + /*! * ignore */ @@ -10,7 +13,7 @@ module.exports = function selectPopulatedFields(query) { if (opts.populate != null) { const paths = Object.keys(opts.populate); const userProvidedFields = query._userProvidedFields || {}; - if (query.selectedInclusively()) { + if (isInclusive(query._fields)) { for (const path of paths) { if (!isPathInFields(userProvidedFields, path)) { query.select(path); @@ -18,7 +21,7 @@ module.exports = function selectPopulatedFields(query) { delete query._fields[path]; } } - } else if (query.selectedExclusively()) { + } else if (isExclusive(query._fields)) { for (const path of paths) { if (userProvidedFields[path] == null) { delete query._fields[path]; diff --git a/lib/query.js b/lib/query.js index 9d3df0931c6..117dddcb893 100644 --- a/lib/query.js +++ b/lib/query.js @@ -22,6 +22,7 @@ const promiseOrCallback = require('./helpers/promiseOrCallback'); const getDiscriminatorByValue = require('./helpers/discriminator/getDiscriminatorByValue'); const hasDollarKeys = require('./helpers/query/hasDollarKeys'); const helpers = require('./queryhelpers'); +const isExclusive = require('./helpers/projection/isExclusive'); const isInclusive = require('./helpers/projection/isInclusive'); const mquery = require('mquery'); const parseProjection = require('./helpers/projection/parseProjection'); @@ -5369,21 +5370,7 @@ Query.prototype.selectedInclusively = function selectedInclusively() { */ Query.prototype.selectedExclusively = function selectedExclusively() { - if (!this._fields) { - return false; - } - - const keys = Object.keys(this._fields); - for (const key of keys) { - if (key === '_id') { - continue; - } - if (this._fields[key] === 0 || this._fields[key] === false) { - return true; - } - } - - return false; + return isExclusive(this._fields); }; /*!