Server IP : 162.213.251.212 / Your IP : 3.145.164.205 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/allssztx/nodevenv/needapair.com/20/lib/node_modules/mongodb/lib/cursor/ |
Upload File : |
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AggregationCursor = void 0; const aggregate_1 = require("../operations/aggregate"); const execute_operation_1 = require("../operations/execute_operation"); const utils_1 = require("../utils"); const abstract_cursor_1 = require("./abstract_cursor"); /** * The **AggregationCursor** class is an internal class that embodies an aggregation cursor on MongoDB * allowing for iteration over the results returned from the underlying query. It supports * one by one document iteration, conversion to an array or can be iterated as a Node 4.X * or higher stream * @public */ class AggregationCursor extends abstract_cursor_1.AbstractCursor { /** @internal */ constructor(client, namespace, pipeline = [], options = {}) { super(client, namespace, options); this.pipeline = pipeline; this.aggregateOptions = options; } clone() { const clonedOptions = (0, utils_1.mergeOptions)({}, this.aggregateOptions); delete clonedOptions.session; return new AggregationCursor(this.client, this.namespace, this.pipeline, { ...clonedOptions }); } map(transform) { return super.map(transform); } /** @internal */ async _initialize(session) { const aggregateOperation = new aggregate_1.AggregateOperation(this.namespace, this.pipeline, { ...this.aggregateOptions, ...this.cursorOptions, session }); const response = await (0, execute_operation_1.executeOperation)(this.client, aggregateOperation); return { server: aggregateOperation.server, session, response }; } /** Execute the explain for the cursor */ async explain(verbosity) { return (await (0, execute_operation_1.executeOperation)(this.client, new aggregate_1.AggregateOperation(this.namespace, this.pipeline, { ...this.aggregateOptions, // NOTE: order matters here, we may need to refine this ...this.cursorOptions, explain: verbosity ?? true }))).shift(this.deserializationOptions); } addStage(stage) { this.throwIfInitialized(); this.pipeline.push(stage); return this; } group($group) { return this.addStage({ $group }); } /** Add a limit stage to the aggregation pipeline */ limit($limit) { return this.addStage({ $limit }); } /** Add a match stage to the aggregation pipeline */ match($match) { return this.addStage({ $match }); } /** Add an out stage to the aggregation pipeline */ out($out) { return this.addStage({ $out }); } /** * Add a project stage to the aggregation pipeline * * @remarks * In order to strictly type this function you must provide an interface * that represents the effect of your projection on the result documents. * * By default chaining a projection to your cursor changes the returned type to the generic {@link Document} type. * You should specify a parameterized type to have assertions on your final results. * * @example * ```typescript * // Best way * const docs: AggregationCursor<{ a: number }> = cursor.project<{ a: number }>({ _id: 0, a: true }); * // Flexible way * const docs: AggregationCursor<Document> = cursor.project({ _id: 0, a: true }); * ``` * * @remarks * In order to strictly type this function you must provide an interface * that represents the effect of your projection on the result documents. * * **Note for Typescript Users:** adding a transform changes the return type of the iteration of this cursor, * it **does not** return a new instance of a cursor. This means when calling project, * you should always assign the result to a new variable in order to get a correctly typed cursor variable. * Take note of the following example: * * @example * ```typescript * const cursor: AggregationCursor<{ a: number; b: string }> = coll.aggregate([]); * const projectCursor = cursor.project<{ a: number }>({ _id: 0, a: true }); * const aPropOnlyArray: {a: number}[] = await projectCursor.toArray(); * * // or always use chaining and save the final cursor * * const cursor = coll.aggregate().project<{ a: string }>({ * _id: 0, * a: { $convert: { input: '$a', to: 'string' } * }}); * ``` */ project($project) { return this.addStage({ $project }); } /** Add a lookup stage to the aggregation pipeline */ lookup($lookup) { return this.addStage({ $lookup }); } /** Add a redact stage to the aggregation pipeline */ redact($redact) { return this.addStage({ $redact }); } /** Add a skip stage to the aggregation pipeline */ skip($skip) { return this.addStage({ $skip }); } /** Add a sort stage to the aggregation pipeline */ sort($sort) { return this.addStage({ $sort }); } /** Add a unwind stage to the aggregation pipeline */ unwind($unwind) { return this.addStage({ $unwind }); } /** Add a geoNear stage to the aggregation pipeline */ geoNear($geoNear) { return this.addStage({ $geoNear }); } } exports.AggregationCursor = AggregationCursor; //# sourceMappingURL=aggregation_cursor.js.map