|
|
/*! * Module dependencies */
var utils = require('./utils');
/*! * Prepare a set of path options for query population. * * @param {Query} query * @param {Object} options * @return {Array} */
exports.preparePopulationOptions = function preparePopulationOptions(query, options) { var pop = utils.object.vals(query.options.populate);
// lean options should trickle through all queries
if (options.lean) pop.forEach(makeLean);
return pop; };
/*! * Prepare a set of path options for query population. This is the MongooseQuery * version * * @param {Query} query * @param {Object} options * @return {Array} */
exports.preparePopulationOptionsMQ = function preparePopulationOptionsMQ(query, options) { var pop = utils.object.vals(query._mongooseOptions.populate);
// lean options should trickle through all queries
if (options.lean) pop.forEach(makeLean);
return pop; };
/*! * If the document is a mapped discriminator type, it returns a model instance for that type, otherwise, * it returns an instance of the given model. * * @param {Model} model * @param {Object} doc * @param {Object} fields * * @return {Model} */ exports.createModel = function createModel(model, doc, fields) { var discriminatorMapping = model.schema ? model.schema.discriminatorMapping : null;
var key = discriminatorMapping && discriminatorMapping.isRoot ? discriminatorMapping.key : null;
if (key && doc[key] && model.discriminators && model.discriminators[doc[key]]) { return new model.discriminators[doc[key]](undefined, fields, true); }
return new model(undefined, fields, true); };
/*! * Set each path query option to lean * * @param {Object} option */
function makeLean(option) { option.options || (option.options = {}); option.options.lean = true; }
|