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
						
					
					
				'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;
 |