thoughts/node_modules/mongoose/lib/queryhelpers.js
node_modules/mongoose/lib/queryhelpers.jsRaw
1
2/*!
3 * Module dependencies
4 */
5
6var utils = require('./utils');
7
8/*!
9 * Prepare a set of path options for query population.
10 *
11 * @param {Query} query
12 * @param {Object} options
13 * @return {Array}
14 */
15
16exports.preparePopulationOptions = function preparePopulationOptions(query, options) {
17 var pop = utils.object.vals(query.options.populate);
18
19 // lean options should trickle through all queries
20 if (options.lean) pop.forEach(makeLean);
21
22 return pop;
23};
24
25/*!
26 * Prepare a set of path options for query population. This is the MongooseQuery
27 * version
28 *
29 * @param {Query} query
30 * @param {Object} options
31 * @return {Array}
32 */
33
34exports.preparePopulationOptionsMQ = function preparePopulationOptionsMQ(query, options) {
35 var pop = utils.object.vals(query._mongooseOptions.populate);
36
37 // lean options should trickle through all queries
38 if (options.lean) pop.forEach(makeLean);
39
40 return pop;
41};
42
43/*!
44 * If the document is a mapped discriminator type, it returns a model instance for that type, otherwise,
45 * it returns an instance of the given model.
46 *
47 * @param {Model} model
48 * @param {Object} doc
49 * @param {Object} fields
50 *
51 * @return {Model}
52 */
53exports.createModel = function createModel(model, doc, fields) {
54 var discriminatorMapping = model.schema
55 ? model.schema.discriminatorMapping
56 : null;
57
58 var key = discriminatorMapping && discriminatorMapping.isRoot
59 ? discriminatorMapping.key
60 : null;
61
62 if (key && doc[key] && model.discriminators && model.discriminators[doc[key]]) {
63 return new model.discriminators[doc[key]](undefined, fields, true);
64 }
65
66 return new model(undefined, fields, true);
67};
68
69/*!
70 * Set each path query option to lean
71 *
72 * @param {Object} option
73 */
74
75function makeLean(option) {
76 option.options || (option.options = {});
77 option.options.lean = true;
78}