Skip to content

Commit 3771f49

Browse files
committed
refactor(query): move selectedInclusively() into separate helper
Re: #5737
1 parent c93fdae commit 3771f49

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

lib/query.js

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var cast = require('./cast');
1111
var castUpdate = require('./services/query/castUpdate');
1212
var hasDollarKeys = require('./services/query/hasDollarKeys');
1313
var helpers = require('./queryhelpers');
14+
var isInclusive = require('./services/projection/isInclusive');
1415
var mquery = require('mquery');
1516
var readPref = require('./drivers').ReadPreference;
1617
var selectPopulatedFields = require('./services/query/selectPopulatedFields');
@@ -3828,23 +3829,7 @@ Query.prototype.centerSphere = function() {
38283829
*/
38293830

38303831
Query.prototype.selectedInclusively = function selectedInclusively() {
3831-
if (!this._fields) {
3832-
return false;
3833-
}
3834-
3835-
var keys = Object.keys(this._fields);
3836-
if (keys.length === 0) {
3837-
return false;
3838-
}
3839-
3840-
for (var i = 0; i < keys.length; ++i) {
3841-
var key = keys[i];
3842-
if (typeof this._fields[key] !== 'object' && !!this._fields[key]) {
3843-
return true;
3844-
}
3845-
}
3846-
3847-
return false;
3832+
return isInclusive(this._fields);
38483833
};
38493834

38503835
/**
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict';
2+
3+
module.exports = function isInclusive(projection) {
4+
if (projection == null) {
5+
return false;
6+
}
7+
8+
var props = Object.keys(projection);
9+
var numProps = props.length;
10+
if (numProps === 0) {
11+
return false;
12+
}
13+
14+
for (var i = 0; i < numProps; ++i) {
15+
var prop = props[i];
16+
// If field is truthy (1, true, etc.) and not an object, then this
17+
// projection must be inclusive. If object, assume its $meta, $slice, etc.
18+
if (typeof projection[prop] !== 'object' && !!projection[prop]) {
19+
return true;
20+
}
21+
}
22+
23+
return false;
24+
};

0 commit comments

Comments
 (0)