arnaucube
arnaucube/thoughtsPublic Self-hosted repository
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}