///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
declare class NativeDate extends globalThis.Date { }
declare module 'mongoose' {
import Kareem = require('kareem');
import events = require('events');
import mongodb = require('mongodb');
import mongoose = require('mongoose');
export type Mongoose = typeof mongoose;
/**
* Mongoose constructor. The exports object of the `mongoose` module is an instance of this
* class. Most apps will only use this one instance.
*/
export const Mongoose: new (options?: MongooseOptions | null) => Mongoose;
export let Promise: any;
/**
* Can be extended to explicitly type specific models.
*/
export interface Models {
[modelName: string]: Model
}
/** An array containing all models associated with this Mongoose instance. */
export const models: Models;
/**
* Removes the model named `name` from the default connection, if it exists.
* You can use this function to clean up any models you created in your tests to
* prevent OverwriteModelErrors.
*/
export function deleteModel(name: string | RegExp): Mongoose;
/**
* Sanitizes query filters against query selector injection attacks by wrapping
* any nested objects that have a property whose name starts with `$` in a `$eq`.
*/
export function sanitizeFilter(filter: QueryFilter): QueryFilter;
/** Gets mongoose options */
export function get(key: K): MongooseOptions[K];
export function omitUndefined>(val: T): T;
export type HydratedDocFromModel> = ReturnType;
/* ! ignore */
export type CompileModelOptions = {
overwriteModels?: boolean,
connection?: Connection
};
export function model(
name: string,
schema?: TSchema,
collection?: string,
options?: CompileModelOptions
): Model<
InferSchemaType,
ObtainSchemaGeneric,
ObtainSchemaGeneric,
ObtainSchemaGeneric,
// If first schema generic param is set, that means we have an explicit raw doc type,
// so user should also specify a hydrated doc type if the auto inferred one isn't correct.
IsItRecordAndNotAny> extends true
? ObtainSchemaGeneric
: HydratedDocument<
InferSchemaType,
ObtainSchemaGeneric & ObtainSchemaGeneric,
ObtainSchemaGeneric,
ObtainSchemaGeneric,
InferSchemaType,
ObtainSchemaGeneric
>,
TSchema,
ObtainSchemaGeneric
> & ObtainSchemaGeneric;
export function model(name: string, schema?: Schema | Schema, collection?: string, options?: CompileModelOptions): Model;
export function model(
name: string,
schema?: Schema,
collection?: string,
options?: CompileModelOptions
): U;
/** Returns an array of model names created on this instance of Mongoose. */
export function modelNames(): Array;
/**
* Overwrites the current driver used by this Mongoose instance. A driver is a
* Mongoose-specific interface that defines functions like `find()`.
*/
export function setDriver(driver: any): Mongoose;
/** The node-mongodb-native driver Mongoose uses. */
export { mongodb as mongo };
/** Declares a global plugin executed on all Schemas. */
export function plugin(fn: (schema: Schema, opts?: any) => void, opts?: any): Mongoose;
/** Getter/setter around function for pluralizing collection names. */
export function pluralize(fn?: ((str: string) => string) | null): ((str: string) => string) | null;
/** Sets mongoose options */
export function set(key: K, value: MongooseOptions[K]): Mongoose;
export function set(options: { [K in keyof MongooseOptions]: MongooseOptions[K] }): Mongoose;
/** The Mongoose version */
export const version: string;
export type AnyKeys = { [P in keyof T]?: T[P] | any };
export interface AnyObject {
[k: string]: any
}
export type Require_id = T extends { _id?: infer U }
? IfAny>
: T & { _id: Types.ObjectId };
export type Default__v = TSchemaOptions extends { versionKey: false }
? T
: TSchemaOptions extends { versionKey: infer VK }
? (
// If VK is a *literal* string, add that property
T & {
[K in VK as K extends string
? (string extends K ? never : K) // drop if wide string
: never
]: number
}
)
: T extends { __v?: infer U }
? T
: T & { __v: number };
/** Helper type for getting the hydrated document type from the raw document type. The hydrated document type is what `new MyModel()` returns. */
export type HydratedDocument<
HydratedDocPathsType,
TOverrides = {},
TQueryHelpers = {},
TVirtuals = {},
RawDocType = HydratedDocPathsType,
TSchemaOptions = DefaultSchemaOptions
> = IfAny<
HydratedDocPathsType,
any,
TOverrides extends Record ?
Document &
Default__v, TSchemaOptions> &
IfEquals<
TVirtuals,
{},
AddDefaultId,
TVirtuals
> :
IfAny<
TOverrides,
Document & Default__v, TSchemaOptions>,
Document & MergeType<
Default__v, TSchemaOptions>,
IfEquals<
TOverrides,
{},
TOverrides,
TOverrides & AddDefaultId
>
>
>
>;
export type HydratedSingleSubdocument<
DocType,
TOverrides = {}
> = IfAny<
DocType,
any,
TOverrides extends Record ?
Types.Subdocument, DocType> & Require_id :
IfAny<
TOverrides,
Types.Subdocument, DocType> & Require_id,
Types.Subdocument, DocType> & MergeType<
Require_id,
TOverrides
>
>
>;
export type HydratedArraySubdocument = IfAny<
DocType,
any,
TOverrides extends Record ?
Types.ArraySubdocument, DocType> & Require_id :
IfAny<
TOverrides,
Types.ArraySubdocument, DocType> & Require_id,
Types.ArraySubdocument, DocType> & MergeType<
Require_id,
TOverrides
>
>
>;
export type HydratedDocumentFromSchema = HydratedDocument<
InferSchemaType,
ObtainSchemaGeneric & ObtainSchemaGeneric,
ObtainSchemaGeneric,
ObtainSchemaGeneric,
InferSchemaType,
ObtainSchemaGeneric
>;
export interface TagSet {
[k: string]: string;
}
export interface ToObjectOptions> {
/** if `options.virtuals = true`, you can set `options.aliases = false` to skip applying aliases. This option is a no-op if `options.virtuals = false`. */
aliases?: boolean;
/** if true, replace any conventionally populated paths with the original id in the output. Has no affect on virtual populated paths. */
depopulate?: boolean;
/** if true, convert Maps to POJOs. Useful if you want to `JSON.stringify()` the result of `toObject()`. */
flattenMaps?: boolean;
/** if true, convert any ObjectIds in the result to 24 character hex strings. */
flattenObjectIds?: boolean;
/** if true, convert any UUIDs in the result to 36 character hex strings. */
flattenUUIDs?: boolean;
/** apply all getters (path and virtual getters) */
getters?: boolean;
/** remove empty objects (defaults to true) */
minimize?: boolean;
/** If true, the resulting object will only have fields that are defined in the document's schema. By default, `toJSON()` & `toObject()` returns all fields in the underlying document from MongoDB, including ones that are not listed in the schema. */
schemaFieldsOnly?: boolean;
/** if set, mongoose will call this function to allow you to transform the returned object */
transform?: boolean | ((
doc: THydratedDocumentType,
ret: Default__v>,
options: ToObjectOptions
) => any);
/** If true, omits fields that are excluded in this document's projection. Unless you specified a projection, this will omit any field that has `select: false` in the schema. */
useProjection?: boolean;
/** if false, exclude the version key (`__v` by default) from the output */
versionKey?: boolean;
/** apply virtual getters (can override getters option) */
virtuals?: boolean | string[];
}
export type DiscriminatorModel = T extends Model
?
M extends Model
? Model & T, MQueryHelpers | TQueryHelpers, MInstanceMethods | TInstanceMethods, MVirtuals | TVirtuals>
: M
: M;
export type DiscriminatorSchema =
DisSchema extends Schema
? Schema, DiscriminatorModel, DisSchemaInstanceMethods | TInstanceMethods, DisSchemaQueryhelpers | TQueryHelpers, DisSchemaVirtuals | TVirtuals, DisSchemaStatics & TStaticMethods>
: Schema;
type QueryResultType = T extends Query ? ResultType : never;
type PluginFunction<
DocType,
M,
TInstanceMethods,
TQueryHelpers,
TVirtuals,
TStaticMethods> = (schema: Schema, opts?: any) => void;
export class Schema<
RawDocType = any,
TModelType = Model,
TInstanceMethods = {},
TQueryHelpers = {},
TVirtuals = {},
TStaticMethods = {},
TSchemaOptions = DefaultSchemaOptions,
DocType extends ApplySchemaOptions<
ObtainDocumentType>,
ResolveSchemaOptions
> = ApplySchemaOptions<
ObtainDocumentType>,
ResolveSchemaOptions
>,
THydratedDocumentType = HydratedDocument<
DocType,
AddDefaultId & TInstanceMethods,
TQueryHelpers,
AddDefaultId,
IsItRecordAndNotAny extends true ? RawDocType : DocType,
ResolveSchemaOptions
>,
TSchemaDefinition = IfAny, RawDocType, THydratedDocumentType>>,
LeanResultType = IsItRecordAndNotAny extends true ? RawDocType : Default__v>>>
>
extends events.EventEmitter {
/**
* Create a new schema
*/
constructor(
definition?: SchemaDefinition, RawDocType, THydratedDocumentType> | DocType,
options?: SchemaOptions<
FlatRecord,
TInstanceMethods,
TQueryHelpers,
TStaticMethods,
TVirtuals,
THydratedDocumentType,
IfEquals<
TModelType,
Model,
Model,
TModelType
>
> | ResolveSchemaOptions
);
/* Creates a new schema with the given definition and options. Equivalent to `new Schema(definition, options)`, but with better automatic type inference. */
static create<
TSchemaDefinition extends SchemaDefinition,
TSchemaOptions extends DefaultSchemaOptions,
RawDocType extends ApplySchemaOptions<
InferRawDocType>,
ResolveSchemaOptions
>,
THydratedDocumentType extends AnyObject = HydratedDocument<
InferHydratedDocType>,
TSchemaOptions extends { methods: infer M } ? M : {},
TSchemaOptions extends { query: any } ? TSchemaOptions['query'] : {},
ResolveVirtuals,
RawDocType,
ResolveSchemaOptions
>
>(def: TSchemaDefinition): Schema<
RawDocType,
Model,
TSchemaOptions extends { methods: infer M } ? M : {},
TSchemaOptions extends { query: any } ? TSchemaOptions['query'] : {},
ResolveVirtuals,
TSchemaOptions extends { statics: any } ? TSchemaOptions['statics'] : {},
TSchemaOptions,
ApplySchemaOptions<
ObtainDocumentType>,
ResolveSchemaOptions
>,
THydratedDocumentType,
TSchemaDefinition,
ApplySchemaOptions<
InferRawDocType, { bufferToBinary: true }>,
ResolveSchemaOptions
>
>;
static create<
TSchemaDefinition extends SchemaDefinition,
TSchemaOptions extends SchemaOptions>,
RawDocType extends ApplySchemaOptions<
InferRawDocType>,
ResolveSchemaOptions
>,
TMethods = TSchemaOptions extends { methods: infer M } ? { [K in keyof M]: OmitThisParameter } : {},
TStatics = TSchemaOptions extends { statics: infer S } ? { [K in keyof S]: OmitThisParameter } : {}
>(def: TSchemaDefinition, options: TSchemaOptions & {
statics?: SchemaOptionsStaticsPropertyType<
TStatics,
Model
>
}): Schema<
RawDocType,
Model,
TMethods,
TSchemaOptions extends { query: any } ? TSchemaOptions['query'] : {},
ResolveVirtuals,
TStatics,
TSchemaOptions,
ApplySchemaOptions<
ObtainDocumentType>,
ResolveSchemaOptions
>,
HydratedDocument<
InferHydratedDocType>,
TMethods,
TSchemaOptions extends { query: any } ? TSchemaOptions['query'] : {},
ResolveVirtuals,
RawDocType,
ResolveSchemaOptions
>,
TSchemaDefinition,
ApplySchemaOptions<
InferRawDocType, { bufferToBinary: true }>,
ResolveSchemaOptions
>
>;
/** Adds key path / schema type pairs to this schema. */
add(obj: SchemaDefinition, RawDocType> | Schema, prefix?: string): this;
/**
* Add an alias for `path`. This means getting or setting the `alias`
* is equivalent to getting or setting the `path`.
*/
alias(path: string, alias: string | string[]): this;
/**
* Array of child schemas (from document arrays and single nested subdocs)
* and their corresponding compiled models. Each element of the array is
* an object with 2 properties: `schema` and `model`.
*/
childSchemas: { schema: Schema, model: any }[];
/** Removes all indexes on this schema */
clearIndexes(): this;
/** Returns a copy of this schema */
clone(): this;
discriminator(name: string | number, schema: DisSchema, options?: DiscriminatorOptions): this;
/** Returns a new schema that has the picked `paths` from this schema. */
pick(paths: string[], options?: SchemaOptions): T;
/** Object containing discriminators defined on this schema */
discriminators?: { [name: string]: Schema };
/** Iterates the schemas paths similar to Array#forEach. */
eachPath(fn: (path: string, type: SchemaType) => void): this;
/** Defines an index (most likely compound) for this schema. */
index(fields: IndexDefinition, options?: Omit & { unique?: boolean | [true, string] }): this;
/**
* Define a search index for this schema.
*
* @remarks Search indexes are only supported when used against a 7.0+ Mongo Atlas cluster.
*/
searchIndex(description: SearchIndexDescription): this;
/**
* Returns a list of indexes that this schema declares, via `schema.index()`
* or by `index: true` in a path's options.
*/
indexes(): Array<[IndexDefinition, IndexOptions]>;
/** Gets a schema option. */
get(key: K): SchemaOptions[K];
/**
* Loads an ES6 class into a schema. Maps [setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) + [getters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get), [static methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static),
* and [instance methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Class_body_and_method_definitions)
* to schema [virtuals](http://mongoosejs.com/docs/guide.html#virtuals),
* [statics](http://mongoosejs.com/docs/guide.html#statics), and
* [methods](http://mongoosejs.com/docs/guide.html#methods).
*/
loadClass(model: Function, onlyVirtuals?: boolean): this;
/** Adds an instance method to documents constructed from Models compiled from this schema. */
method(name: string, fn: (this: Context, ...args: any[]) => any, opts?: any): this;
method(obj: Partial): this;
/** Object of currently defined methods on this schema. */
methods: AddThisParameter & AnyObject;
/** The original object passed to the schema constructor */
obj: SchemaDefinition, RawDocType>;
/** Returns a new schema that has the `paths` from the original schema, minus the omitted ones. */
omit(paths: string[], options?: SchemaOptions): T;
options: SchemaOptions;
/** Gets/sets schema paths. */
path>(path: string): ResultType;
path(path: pathGeneric): SchemaType;
path(path: string, constructor: any): this;
/** Lists all paths and their type in the schema. */
paths: {
[key: string]: SchemaType;
};
/** Returns the pathType of `path` for this schema. */
pathType(path: string): string;
/** Registers a plugin for this schema. */
plugin, POptions extends Parameters[1] = Parameters[1]>(fn: PFunc, opts?: POptions): this;
plugin, any, any, any, any>, POptions extends Parameters[1] = Parameters[1]>(fn: PFunc, opts?: POptions): this;
/** Defines a post hook for the model. */
// PostMiddlewareFunction
// with errorHandler set to true
post>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | RegExp, options: SchemaPostOptions & { errorHandler: true }, fn: ErrorHandlingMiddlewareWithOption): this;
post(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { errorHandler: true }, fn: ErrorHandlingMiddlewareWithOption): this;
post>(method: 'aggregate' | RegExp, options: SchemaPostOptions & { errorHandler: true }, fn: ErrorHandlingMiddlewareWithOption>): this;
post(method: 'insertMany' | RegExp, options: SchemaPostOptions & { errorHandler: true }, fn: ErrorHandlingMiddlewareWithOption): this;
// this = never since it never happens
post(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: false, query: false }, fn: PostMiddlewareFunction): this;
post(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPostOptions & { document: boolean, query: false }, fn: PostMiddlewareFunction>): this;
post(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: false, query: true }, fn: PostMiddlewareFunction): this;
// this = Document
post(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], fn: PostMiddlewareFunction): this;
post(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], options: SchemaPostOptions & SchemaPostOptions, fn: PostMiddlewareFunction): this;
post(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: true, query: false }, fn: PostMiddlewareFunction): this;
post(method: 'init', fn: PostMiddlewareFunction): this;
// this = Query
post>(method: MongooseRawResultQueryMiddleware|MongooseRawResultQueryMiddleware[], fn: PostMiddlewareFunction | ModifyResult>>): this;
post>(method: MongooseDefaultQueryMiddleware|MongooseDefaultQueryMiddleware[], fn: PostMiddlewareFunction>): this;
post>(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPostOptions, fn: PostMiddlewareFunction>): this;
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: false, query: true }, fn: PostMiddlewareFunction>): this;
// this = Union of Document and Query, could be called with any of them
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: true, query: true }, fn: PostMiddlewareFunction>): this;
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction>): this;
// ErrorHandlingMiddlewareFunction
// this = never since it never happens
post(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPostOptions & { document: boolean, query: false }, fn: ErrorHandlingMiddlewareFunction): this;
post(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], options: SchemaPostOptions & { document: false, query: boolean }, fn: ErrorHandlingMiddlewareFunction): this;
post(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: false, query: false }, fn: ErrorHandlingMiddlewareFunction): this;
// this = Document
post(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], fn: ErrorHandlingMiddlewareFunction): this;
post(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction): this;
post(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: true, query: false }, fn: ErrorHandlingMiddlewareFunction): this;
// this = Query
post>(method: MongooseDefaultQueryMiddleware|MongooseDefaultQueryMiddleware[], fn: ErrorHandlingMiddlewareFunction): this;
post>(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction): this;
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: false, query: true }, fn: ErrorHandlingMiddlewareFunction): this;
// this = Union of Document and Query, could be called with any of them
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPostOptions & { document: true, query: true }, fn: ErrorHandlingMiddlewareFunction): this;
post>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction): this;
// method aggregate and insertMany with PostMiddlewareFunction
post>(method: 'aggregate' | RegExp, fn: PostMiddlewareFunction>>): this;
post>(method: 'aggregate' | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction>>): this;
post(method: 'insertMany' | RegExp, fn: PostMiddlewareFunction): this;
post(method: 'insertMany' | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction): this;
// method aggregate and insertMany with ErrorHandlingMiddlewareFunction
post>(method: 'aggregate' | RegExp, fn: ErrorHandlingMiddlewareFunction>): this;
post>(method: 'aggregate' | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction>): this;
post(method: 'bulkWrite' | 'createCollection' | 'insertMany' | RegExp, fn: ErrorHandlingMiddlewareFunction): this;
post(method: 'bulkWrite' | 'createCollection' | 'insertMany' | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction): this;
/** Defines a pre hook for the model. */
// this = never since it never happens
pre(method: 'save', options: SchemaPreOptions & { document: false, query: boolean }, fn: PreSaveMiddlewareFunction): this;
pre(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPreOptions & { document: false, query: false }, fn: PreMiddlewareFunction): this;
pre(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPreOptions & { document: boolean, query: false }, fn: PreMiddlewareFunction): this;
pre(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[] | RegExp, options: SchemaPreOptions & { document: false, query: boolean }, fn: PreMiddlewareFunction): this;
// this = Union of Document and Query, could be called with any of them
pre>(
method: 'updateOne' | RegExp,
options: SchemaPreOptions & { document: true, query: true },
fn: PreUpdateOneMiddlewareFunction
): this;
pre>(
method: 'deleteOne' | RegExp,
options: SchemaPreOptions & { document: true, query: true },
fn: PreDeleteOneMiddlewareFunction
): this;
// this = Document
pre(method: 'save', fn: PreSaveMiddlewareFunction): this;
pre(method: 'init', fn: (this: T, doc: U) => void): this;
pre(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], fn: PreMiddlewareFunction): this;
pre(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], options: SchemaPreOptions, fn: PreMiddlewareFunction): this;
pre(
method: 'updateOne' | RegExp,
options: SchemaPreOptions & { document: true },
fn: PreUpdateOneMiddlewareFunction
): this;
pre(
method: 'deleteOne' | RegExp,
options: SchemaPreOptions & { document: true },
fn: PreDeleteOneMiddlewareFunction
): this;
pre(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPreOptions & { document: true, query: false }, fn: PreMiddlewareFunction): this;
// this = Query
pre>(method: MongooseDefaultQueryMiddleware|MongooseDefaultQueryMiddleware[], fn: PreMiddlewareFunction): this;
pre>(method: MongooseDistinctQueryMiddleware|MongooseDistinctQueryMiddleware[], options: SchemaPreOptions, fn: PreMiddlewareFunction): this;
pre>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPreOptions & { document: false, query: true }, fn: PreMiddlewareFunction): this;
// this = Union of Document and Query, could be called with any of them
pre>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, options: SchemaPreOptions & { document: true, query: true }, fn: PreMiddlewareFunction): this;
pre>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction): this;
// method aggregate
pre>(method: 'aggregate' | RegExp, fn: PreMiddlewareFunction): this;
/* method insertMany */
pre(
method: 'insertMany' | RegExp,
fn: (
this: TModelType,
docs: any | Array,
options?: InsertManyOptions & { lean?: boolean }
) => void | Promise
): this;
/* method bulkWrite */
pre(
method: 'bulkWrite' | RegExp,
fn: (
this: TModelType,
ops: Array