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.
		
		
		
		
		
			
		
			
				
					50 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					50 lines
				
				1.5 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | const OperationBase = require('./operation').OperationBase; | ||
|  | const Aspect = require('./operation').Aspect; | ||
|  | const defineAspects = require('./operation').defineAspects; | ||
|  | const ReadPreference = require('../core').ReadPreference; | ||
|  | const maxWireVersion = require('../core/utils').maxWireVersion; | ||
|  | const MongoError = require('../core/error').MongoError; | ||
|  | 
 | ||
|  | class FindOperation extends OperationBase { | ||
|  |   constructor(collection, ns, command, options) { | ||
|  |     super(options); | ||
|  | 
 | ||
|  |     this.ns = ns; | ||
|  |     this.cmd = command; | ||
|  |     this.readPreference = ReadPreference.resolve(collection, this.options); | ||
|  |   } | ||
|  | 
 | ||
|  |   execute(server, callback) { | ||
|  |     // copied from `CommandOperationV2`, to be subclassed in the future
 | ||
|  |     this.server = server; | ||
|  | 
 | ||
|  |     // updates readPreference if setReadPreference was called on the cursor
 | ||
|  |     this.readPreference = ReadPreference.resolve(this, this.options); | ||
|  | 
 | ||
|  |     if (typeof this.cmd.allowDiskUse !== 'undefined' && maxWireVersion(server) < 4) { | ||
|  |       callback(new MongoError('The `allowDiskUse` option is not supported on MongoDB < 3.2')); | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (this.explain) { | ||
|  |       // We need to manually ensure explain is in the options.
 | ||
|  |       this.options.explain = this.explain.verbosity; | ||
|  |     } | ||
|  | 
 | ||
|  |     // TOOD: use `MongoDBNamespace` through and through
 | ||
|  |     const cursorState = this.cursorState || {}; | ||
|  |     server.query(this.ns.toString(), this.cmd, cursorState, this.options, callback); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | defineAspects(FindOperation, [ | ||
|  |   Aspect.READ_OPERATION, | ||
|  |   Aspect.RETRYABLE, | ||
|  |   Aspect.EXECUTE_WITH_SELECTION, | ||
|  |   Aspect.EXPLAINABLE | ||
|  | ]); | ||
|  | 
 | ||
|  | module.exports = FindOperation; |