| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.FindOperation = void 0;const error_1 = require("../error");const read_concern_1 = require("../read_concern");const sort_1 = require("../sort");const utils_1 = require("../utils");const command_1 = require("./command");const operation_1 = require("./operation");/** @internal */class FindOperation extends command_1.CommandOperation {    constructor(collection, ns, filter = {}, options = {}) {        super(collection, options);        this.options = { ...options };        delete this.options.writeConcern;        this.ns = ns;        if (typeof filter !== 'object' || Array.isArray(filter)) {            throw new error_1.MongoInvalidArgumentError('Query filter must be a plain object or ObjectId');        }        // special case passing in an ObjectId as a filter        this.filter = filter != null && filter._bsontype === 'ObjectId' ? { _id: filter } : filter;    }    async execute(server, session) {        this.server = server;        const options = this.options;        let findCommand = makeFindCommand(this.ns, this.filter, options);        if (this.explain) {            findCommand = (0, utils_1.decorateWithExplain)(findCommand, this.explain);        }        return server.commandAsync(this.ns, findCommand, {            ...this.options,            ...this.bsonOptions,            documentsReturnedIn: 'firstBatch',            session        });    }}exports.FindOperation = FindOperation;function makeFindCommand(ns, filter, options) {    const findCommand = {        find: ns.collection,        filter    };    if (options.sort) {        findCommand.sort = (0, sort_1.formatSort)(options.sort);    }    if (options.projection) {        let projection = options.projection;        if (projection && Array.isArray(projection)) {            projection = projection.length                ? projection.reduce((result, field) => {                    result[field] = 1;                    return result;                }, {})                : { _id: 1 };        }        findCommand.projection = projection;    }    if (options.hint) {        findCommand.hint = (0, utils_1.normalizeHintField)(options.hint);    }    if (typeof options.skip === 'number') {        findCommand.skip = options.skip;    }    if (typeof options.limit === 'number') {        if (options.limit < 0) {            findCommand.limit = -options.limit;            findCommand.singleBatch = true;        }        else {            findCommand.limit = options.limit;        }    }    if (typeof options.batchSize === 'number') {        if (options.batchSize < 0) {            if (options.limit &&                options.limit !== 0 &&                Math.abs(options.batchSize) < Math.abs(options.limit)) {                findCommand.limit = -options.batchSize;            }            findCommand.singleBatch = true;        }        else {            findCommand.batchSize = options.batchSize;        }    }    if (typeof options.singleBatch === 'boolean') {        findCommand.singleBatch = options.singleBatch;    }    // we check for undefined specifically here to allow falsy values    // eslint-disable-next-line no-restricted-syntax    if (options.comment !== undefined) {        findCommand.comment = options.comment;    }    if (typeof options.maxTimeMS === 'number') {        findCommand.maxTimeMS = options.maxTimeMS;    }    const readConcern = read_concern_1.ReadConcern.fromOptions(options);    if (readConcern) {        findCommand.readConcern = readConcern.toJSON();    }    if (options.max) {        findCommand.max = options.max;    }    if (options.min) {        findCommand.min = options.min;    }    if (typeof options.returnKey === 'boolean') {        findCommand.returnKey = options.returnKey;    }    if (typeof options.showRecordId === 'boolean') {        findCommand.showRecordId = options.showRecordId;    }    if (typeof options.tailable === 'boolean') {        findCommand.tailable = options.tailable;    }    if (typeof options.oplogReplay === 'boolean') {        findCommand.oplogReplay = options.oplogReplay;    }    if (typeof options.timeout === 'boolean') {        findCommand.noCursorTimeout = !options.timeout;    }    else if (typeof options.noCursorTimeout === 'boolean') {        findCommand.noCursorTimeout = options.noCursorTimeout;    }    if (typeof options.awaitData === 'boolean') {        findCommand.awaitData = options.awaitData;    }    if (typeof options.allowPartialResults === 'boolean') {        findCommand.allowPartialResults = options.allowPartialResults;    }    if (options.collation) {        findCommand.collation = options.collation;    }    if (typeof options.allowDiskUse === 'boolean') {        findCommand.allowDiskUse = options.allowDiskUse;    }    if (options.let) {        findCommand.let = options.let;    }    return findCommand;}(0, operation_1.defineAspects)(FindOperation, [    operation_1.Aspect.READ_OPERATION,    operation_1.Aspect.RETRYABLE,    operation_1.Aspect.EXPLAINABLE,    operation_1.Aspect.CURSOR_CREATING]);//# sourceMappingURL=find.js.map
 |