You cannot 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
JavaScript
58 lines
2.5 KiB
JavaScript
10 months 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.
|
||
|
*/
|
||
|
async execute(server, _session) {
|
||
|
if (server !== this.server) {
|
||
|
throw new error_1.MongoRuntimeError('Getmore must run on the same server operation began on');
|
||
|
}
|
||
|
if (this.cursorId == null || this.cursorId.isZero()) {
|
||
|
throw 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())
|
||
|
throw 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
|
||
|
};
|
||
|
return server.commandAsync(this.ns, getMoreCmd, commandOptions);
|
||
|
}
|
||
|
}
|
||
|
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
|