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.
		
		
		
		
		
			
		
			
				
					58 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					58 lines
				
				2.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.GetMoreOperation = void 0;
							 | 
						||
| 
								 | 
							
								const error_1 = require("../error");
							 | 
						||
| 
								 | 
							
								const utils_1 = require("../utils");
							 | 
						||
| 
								 | 
							
								const operation_1 = require("./operation");
							 | 
						||
| 
								 | 
							
								/** @internal */
							 | 
						||
| 
								 | 
							
								class GetMoreOperation extends operation_1.AbstractOperation {
							 | 
						||
| 
								 | 
							
								    constructor(ns, cursorId, server, options) {
							 | 
						||
| 
								 | 
							
								        super(options);
							 | 
						||
| 
								 | 
							
								        this.options = options;
							 | 
						||
| 
								 | 
							
								        this.ns = ns;
							 | 
						||
| 
								 | 
							
								        this.cursorId = cursorId;
							 | 
						||
| 
								 | 
							
								        this.server = server;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Although there is a server already associated with the get more operation, the signature
							 | 
						||
| 
								 | 
							
								     * for execute passes a server so we will just use that one.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    execute(server, session, callback) {
							 | 
						||
| 
								 | 
							
								        if (server !== this.server) {
							 | 
						||
| 
								 | 
							
								            return callback(new error_1.MongoRuntimeError('Getmore must run on the same server operation began on'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (this.cursorId == null || this.cursorId.isZero()) {
							 | 
						||
| 
								 | 
							
								            return callback(new error_1.MongoRuntimeError('Unable to iterate cursor with no id'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const collection = this.ns.collection;
							 | 
						||
| 
								 | 
							
								        if (collection == null) {
							 | 
						||
| 
								 | 
							
								            // Cursors should have adopted the namespace returned by MongoDB
							 | 
						||
| 
								 | 
							
								            // which should always defined a collection name (even a pseudo one, ex. db.aggregate())
							 | 
						||
| 
								 | 
							
								            return callback(new error_1.MongoRuntimeError('A collection name must be determined before getMore'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const getMoreCmd = {
							 | 
						||
| 
								 | 
							
								            getMore: this.cursorId,
							 | 
						||
| 
								 | 
							
								            collection
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        if (typeof this.options.batchSize === 'number') {
							 | 
						||
| 
								 | 
							
								            getMoreCmd.batchSize = Math.abs(this.options.batchSize);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (typeof this.options.maxAwaitTimeMS === 'number') {
							 | 
						||
| 
								 | 
							
								            getMoreCmd.maxTimeMS = this.options.maxAwaitTimeMS;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // we check for undefined specifically here to allow falsy values
							 | 
						||
| 
								 | 
							
								        // eslint-disable-next-line no-restricted-syntax
							 | 
						||
| 
								 | 
							
								        if (this.options.comment !== undefined && (0, utils_1.maxWireVersion)(server) >= 9) {
							 | 
						||
| 
								 | 
							
								            getMoreCmd.comment = this.options.comment;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        const commandOptions = {
							 | 
						||
| 
								 | 
							
								            returnFieldSelector: null,
							 | 
						||
| 
								 | 
							
								            documentsReturnedIn: 'nextBatch',
							 | 
						||
| 
								 | 
							
								            ...this.options
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        server.command(this.ns, getMoreCmd, commandOptions, callback);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								exports.GetMoreOperation = GetMoreOperation;
							 | 
						||
| 
								 | 
							
								(0, operation_1.defineAspects)(GetMoreOperation, [operation_1.Aspect.READ_OPERATION, operation_1.Aspect.MUST_SELECT_SAME_SERVER]);
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=get_more.js.map
							 |