You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					52 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					52 lines
				
				1.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const helpers = require('../../queryhelpers');
							 | 
						||
| 
								 | 
							
								const immediate = require('../immediate');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = completeMany;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*!
							 | 
						||
| 
								 | 
							
								 * Given a model and an array of docs, hydrates all the docs to be instances
							 | 
						||
| 
								 | 
							
								 * of the model. Used to initialize docs returned from the db from `find()`
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Model} model
							 | 
						||
| 
								 | 
							
								 * @param {Array} docs
							 | 
						||
| 
								 | 
							
								 * @param {Object} fields the projection used, including `select` from schemas
							 | 
						||
| 
								 | 
							
								 * @param {Object} userProvidedFields the user-specified projection
							 | 
						||
| 
								 | 
							
								 * @param {Object} opts
							 | 
						||
| 
								 | 
							
								 * @param {Array} [opts.populated]
							 | 
						||
| 
								 | 
							
								 * @param {ClientSession} [opts.session]
							 | 
						||
| 
								 | 
							
								 * @param {Function} callback
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function completeMany(model, docs, fields, userProvidedFields, opts, callback) {
							 | 
						||
| 
								 | 
							
								  const arr = [];
							 | 
						||
| 
								 | 
							
								  let count = docs.length;
							 | 
						||
| 
								 | 
							
								  const len = count;
							 | 
						||
| 
								 | 
							
								  let error = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function init(_error) {
							 | 
						||
| 
								 | 
							
								    if (_error != null) {
							 | 
						||
| 
								 | 
							
								      error = error || _error;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (error != null) {
							 | 
						||
| 
								 | 
							
								      --count || immediate(() => callback(error));
							 | 
						||
| 
								 | 
							
								      return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    --count || immediate(() => callback(error, arr));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  for (let i = 0; i < len; ++i) {
							 | 
						||
| 
								 | 
							
								    arr[i] = helpers.createModel(model, docs[i], fields, userProvidedFields);
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      arr[i].init(docs[i], opts, init);
							 | 
						||
| 
								 | 
							
								    } catch (error) {
							 | 
						||
| 
								 | 
							
								      init(error);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (opts.session != null) {
							 | 
						||
| 
								 | 
							
								      arr[i].$session(opts.session);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |