123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 'use strict';
- /*!
- * ignore
- */
- module.exports = function selectPopulatedFields(query) {
- var opts = query._mongooseOptions;
- if (opts.populate != null) {
- var paths = Object.keys(opts.populate);
- var i;
- var userProvidedFields = query._userProvidedFields || {};
- if (query.selectedInclusively()) {
- for (i = 0; i < paths.length; ++i) {
- if (!isPathInFields(userProvidedFields, paths[i])) {
- query.select(paths[i]);
- }
- }
- } else if (query.selectedExclusively()) {
- for (i = 0; i < paths.length; ++i) {
- if (userProvidedFields[paths[i]] == null) {
- delete query._fields[paths[i]];
- }
- }
- }
- }
- };
- /*!
- * ignore
- */
- function isPathInFields(userProvidedFields, path) {
- var pieces = path.split('.');
- var len = pieces.length;
- var cur = pieces[0];
- for (var i = 1; i < len; ++i) {
- if (userProvidedFields[cur] != null) {
- return true;
- }
- cur += '.' + pieces[i];
- }
- return userProvidedFields[cur] != null;
- }
|