Skip to content

Commit

Permalink
fix(NODE-2883): Aggregate Operation should not require parent paramet…
Browse files Browse the repository at this point in the history
…er (#2918)
  • Loading branch information
W-A-James committed Jul 28, 2021
1 parent 967c193 commit dc6e2d6
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 35 deletions.
14 changes: 5 additions & 9 deletions src/change_stream.ts
Expand Up @@ -489,15 +489,11 @@ export class ChangeStreamCursor<TSchema extends Document = Document> extends Abs
}

_initialize(session: ClientSession, callback: Callback<ExecutionResult>): void {
const aggregateOperation = new AggregateOperation(
{ s: { namespace: this.namespace } },
this.pipeline,
{
...this.cursorOptions,
...this.options,
session
}
);
const aggregateOperation = new AggregateOperation(this.namespace, this.pipeline, {
...this.cursorOptions,
...this.options,
session
});

executeOperation(this.topology, aggregateOperation, (err, response) => {
if (err || response == null) {
Expand Down
1 change: 0 additions & 1 deletion src/collection.ts
Expand Up @@ -1387,7 +1387,6 @@ export class Collection<TSchema extends Document = Document> {
}

return new AggregationCursor(
this as TODO_NODE_3286,
getTopology(this),
this.s.namespace,
pipeline,
Expand Down
13 changes: 3 additions & 10 deletions src/cursor/aggregation_cursor.ts
Expand Up @@ -7,16 +7,13 @@ import type { Sort } from '../sort';
import type { Topology } from '../sdam/topology';
import type { Callback, MongoDBNamespace } from '../utils';
import type { ClientSession } from '../sessions';
import type { OperationParent } from '../operations/command';
import type { AbstractCursorOptions } from './abstract_cursor';
import type { ExplainVerbosityLike } from '../explain';
import type { Projection } from '../mongo_types';

/** @public */
export interface AggregationCursorOptions extends AbstractCursorOptions, AggregateOptions {}

/** @internal */
const kParent = Symbol('parent');
/** @internal */
const kPipeline = Symbol('pipeline');
/** @internal */
Expand All @@ -30,24 +27,20 @@ const kOptions = Symbol('options');
* @public
*/
export class AggregationCursor<TSchema = Document> extends AbstractCursor<TSchema> {
/** @internal */
[kParent]: OperationParent; // TODO: NODE-2883
/** @internal */
[kPipeline]: Document[];
/** @internal */
[kOptions]: AggregateOptions;

/** @internal */
constructor(
parent: OperationParent,
topology: Topology,
namespace: MongoDBNamespace,
pipeline: Document[] = [],
options: AggregateOptions = {}
) {
super(topology, namespace, options);

this[kParent] = parent;
this[kPipeline] = pipeline;
this[kOptions] = options;
}
Expand All @@ -59,7 +52,7 @@ export class AggregationCursor<TSchema = Document> extends AbstractCursor<TSchem
clone(): AggregationCursor<TSchema> {
const clonedOptions = mergeOptions({}, this[kOptions]);
delete clonedOptions.session;
return new AggregationCursor(this[kParent], this.topology, this.namespace, this[kPipeline], {
return new AggregationCursor(this.topology, this.namespace, this[kPipeline], {
...clonedOptions
});
}
Expand All @@ -70,7 +63,7 @@ export class AggregationCursor<TSchema = Document> extends AbstractCursor<TSchem

/** @internal */
_initialize(session: ClientSession | undefined, callback: Callback<ExecutionResult>): void {
const aggregateOperation = new AggregateOperation(this[kParent], this[kPipeline], {
const aggregateOperation = new AggregateOperation(this.namespace, this[kPipeline], {
...this[kOptions],
...this.cursorOptions,
session
Expand All @@ -97,7 +90,7 @@ export class AggregationCursor<TSchema = Document> extends AbstractCursor<TSchem

return executeOperation(
this.topology,
new AggregateOperation(this[kParent], this[kPipeline], {
new AggregateOperation(this.namespace, this[kPipeline], {
...this[kOptions], // NOTE: order matters here, we may need to refine this
...this.cursorOptions,
explain: verbosity
Expand Down
1 change: 0 additions & 1 deletion src/db.ts
Expand Up @@ -301,7 +301,6 @@ export class Db {
}

return new AggregationCursor(
this,
getTopology(this),
this.s.namespace,
pipeline,
Expand Down
20 changes: 7 additions & 13 deletions src/operations/aggregate.ts
@@ -1,12 +1,7 @@
import {
CommandOperation,
CommandOperationOptions,
OperationParent,
CollationOptions
} from './command';
import { CommandOperation, CommandOperationOptions, CollationOptions } from './command';
import { ReadPreference } from '../read_preference';
import { MongoInvalidArgumentError } from '../error';
import { maxWireVersion } from '../utils';
import { maxWireVersion, MongoDBNamespace } from '../utils';
import { Aspect, defineAspects, Hint } from './operation';
import type { Callback } from '../utils';
import type { Document } from '../bson';
Expand Down Expand Up @@ -47,14 +42,13 @@ export class AggregateOperation<T = Document> extends CommandOperation<T> {
pipeline: Document[];
hasWriteStage: boolean;

constructor(parent: OperationParent, pipeline: Document[], options?: AggregateOptions) {
super(parent, options);
constructor(ns: MongoDBNamespace, pipeline: Document[], options?: AggregateOptions) {
super(undefined, { ...options, dbName: ns.db });

this.options = options ?? {};
this.target =
parent.s.namespace && parent.s.namespace.collection
? parent.s.namespace.collection
: DB_AGGREGATE_COLLECTION;

// Covers when ns.collection is null, undefined or the empty string, use DB_AGGREGATE_COLLECTION
this.target = ns.collection || DB_AGGREGATE_COLLECTION;

this.pipeline = pipeline;

Expand Down
2 changes: 1 addition & 1 deletion src/operations/count_documents.ts
Expand Up @@ -29,7 +29,7 @@ export class CountDocumentsOperation extends AggregateOperation<number> {

pipeline.push({ $group: { _id: 1, n: { $sum: 1 } } });

super(collection, pipeline, options);
super(collection.s.namespace, pipeline, options);
}

execute(server: Server, session: ClientSession, callback: Callback<number>): void {
Expand Down

0 comments on commit dc6e2d6

Please sign in to comment.