declare module 'mongoose' {
import mongodb = require('mongodb');
/** Extract generic type from Aggregate class */
type AggregateExtract
= P extends Aggregate ? T : never;
interface AggregateOptions extends
SessionOption {
/**
* If true, the MongoDB server will use the hard drive to store data during this aggregation.
*/
allowDiskUse?: boolean;
/**
* Applicable only if you specify the $out or $merge aggregation stages.
*
* Enables db.collection.aggregate() to bypass document validation during the operation. This lets you insert documents that do not meet the validation requirements.
*/
bypassDocumentValidation?: boolean;
/**
* The BSON-serializer will check if keys are valid
*/
collation?: mongodb.CollationOptions;
/**
* Users can specify an arbitrary string to help trace the operation through the database profiler, currentOp, and logs.
*/
comment?: string;
/**
* Specifies the initial batch size for the cursor. The value of the cursor field is a document with the field batchSize.
*/
cursor?: { batchSize?: number; };
/**
* Specifies to return the information on the processing of the pipeline. See Return Information on Aggregation Pipeline Operation for an example.
*
* Not available in multi-document transactions.
*/
explain?: mongodb.ExplainVerbosityLike;
/**
* The index to use for the aggregation. The index is on the initial collection/view against which the aggregation is run.
*/
hint?: string | AnyObject;
/**
* Specifies a document with a list of variables. This allows you to improve command readability by separating the variables from the query text.
*/
let?: AnyObject;
/**
* Specifies a time limit in milliseconds for processing operations on a cursor. If you do not specify a value for maxTimeMS, operations will not time out. A value of 0 explicitly specifies the default unbounded behavior.
*
* @see https://docs.mongodb.com/manual/reference/operator/meta/maxTimeMS/
*/
maxTimeMS?: number;
/**
* Return BSON filled buffers from operations.
*/
raw?: boolean;
/**
* Specifies the read concern.
*/
readConcern?: mongodb.ReadConcernLike;
/**
* The preferred read preference.
*/
readPreference?: mongodb.ReadPreferenceLike;
/**
* Specifies the write concern.
*/
writeConcern?: mongodb.WriteConcern;
[key: string]: any;
}
class Aggregate implements SessionOperation {
/**
* Returns an asyncIterator for use with [`for/await/of` loops](https://thecodebarbarian.com/getting-started-with-async-iterators-in-node-js)
* You do not need to call this function explicitly, the JavaScript runtime
* will call it for you.
*/
[Symbol.asyncIterator](): AsyncIterableIterator>;
options: AggregateOptions;
/**
* Sets an option on this aggregation. This function will be deprecated in a
* future release.
*
* @deprecated
*/
addCursorFlag(flag: CursorFlag, value: boolean): this;
/**
* Appends a new $addFields operator to this aggregate pipeline.
* Requires MongoDB v3.4+ to work
*/
addFields(arg: PipelineStage.AddFields['$addFields']): this;
/** Sets the allowDiskUse option for the aggregation query */
allowDiskUse(value: boolean): this;
/** Appends new operators to this aggregate pipeline */
append(...args: PipelineStage[]): this;
/**
* Executes the query returning a `Promise` which will be
* resolved with either the doc(s) or rejected with the error.
* Like [`.then()`](#query_Query-then), but only takes a rejection handler.
*/
catch: Promise['catch'];
/** Set the collation. */
collation(options: mongodb.CollationOptions): this;
/** Appends a new $count operator to this aggregate pipeline. */
count(fieldName: PipelineStage.Count['$count']): this;
/** Appends a new $densify operator to this aggregate pipeline */
densify(arg: PipelineStage.Densify['$densify']): this;
/**
* Sets the cursor option for the aggregation query
*/
cursor(options?: Record): Cursor;
/** Executes the aggregate pipeline on the currently bound Model. */
exec(callback: Callback): void;
exec(): Promise;
/** Execute the aggregation with explain */
explain(verbosity: mongodb.ExplainVerbosityLike, callback: Callback): void;
explain(verbosity: mongodb.ExplainVerbosityLike): Promise;
explain(callback: Callback): void;
explain(): Promise;
/** Combines multiple aggregation pipelines. */
facet(options: PipelineStage.Facet['$facet']): this;
/** Appends new custom $graphLookup operator(s) to this aggregate pipeline, performing a recursive search on a collection. */
graphLookup(options: PipelineStage.GraphLookup['$graphLookup']): this;
/** Appends new custom $group operator to this aggregate pipeline. */
group(arg: PipelineStage.Group['$group']): this;
/** Sets the hint option for the aggregation query */
hint(value: Record | string): this;
/**
* Appends a new $limit operator to this aggregate pipeline.
* @param num maximum number of records to pass to the next stage
*/
limit(num: PipelineStage.Limit['$limit']): this;
/** Appends new custom $lookup operator to this aggregate pipeline. */
lookup(options: PipelineStage.Lookup['$lookup']): this;
/**
* Appends a new custom $match operator to this aggregate pipeline.
* @param arg $match operator contents
*/
match(arg: PipelineStage.Match['$match']): this;
/**
* Binds this aggregate to a model.
* @param model the model to which the aggregate is to be bound
*/
model(model: Model): this;
/**
* Append a new $near operator to this aggregation pipeline
* @param arg $near operator contents
*/
near(arg: { near?: number[]; distanceField: string; maxDistance?: number; query?: Record; includeLocs?: string; num?: number; uniqueDocs?: boolean }): this;
/** Returns the current pipeline */
pipeline(): PipelineStage[];
/** Appends a new $project operator to this aggregate pipeline. */
project(arg: PipelineStage.Project['$project']): this;
/** Sets the readPreference option for the aggregation query. */
read(pref: mongodb.ReadPreferenceLike): this;
/** Sets the readConcern level for the aggregation query. */
readConcern(level: string): this;
/** Appends a new $redact operator to this aggregate pipeline. */
redact(expression: PipelineStage.Redact['$redact'], thenExpr: '$$DESCEND' | '$$PRUNE' | '$$KEEP' | AnyObject, elseExpr: '$$DESCEND' | '$$PRUNE' | '$$KEEP' | AnyObject): this;
/** Appends a new $replaceRoot operator to this aggregate pipeline. */
replaceRoot(newRoot: PipelineStage.ReplaceRoot['$replaceRoot']['newRoot'] | string): this;
/**
* Helper for [Atlas Text Search](https://docs.atlas.mongodb.com/reference/atlas-search/tutorial/)'s
* `$search` stage.
*/
search(options: PipelineStage.Search['$search']): this;
/** Lets you set arbitrary options, for middlewares or plugins. */
option(value: AggregateOptions): this;
/** Appends new custom $sample operator to this aggregate pipeline. */
sample(arg: PipelineStage.Sample['$sample']['size']): this;
/** Sets the session for this aggregation. Useful for [transactions](/docs/transactions.html). */
session(session: mongodb.ClientSession | null): this;
/**
* Appends a new $skip operator to this aggregate pipeline.
* @param num number of records to skip before next stage
*/
skip(num: PipelineStage.Skip['$skip']): this;
/** Appends a new $sort operator to this aggregate pipeline. */
sort(arg: string | Record | PipelineStage.Sort['$sort']): this;
/** Provides promise for aggregate. */
then: Promise['then'];
/**
* Appends a new $sortByCount operator to this aggregate pipeline. Accepts either a string field name
* or a pipeline object.
*/
sortByCount(arg: string | PipelineStage.SortByCount['$sortByCount']): this;
/** Appends new $unionWith operator to this aggregate pipeline. */
unionWith(options: PipelineStage.UnionWith['$unionWith']): this;
/** Appends new custom $unwind operator(s) to this aggregate pipeline. */
unwind(...args: PipelineStage.Unwind['$unwind'][]): this;
}
}