You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					3062 lines
				
				137 KiB
			
		
		
			
		
	
	
					3062 lines
				
				137 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								declare module 'mongoose' {
							 | 
						||
| 
								 | 
							
								  import events = require('events');
							 | 
						||
| 
								 | 
							
								  import mongodb = require('mongodb');
							 | 
						||
| 
								 | 
							
								  import mongoose = require('mongoose');
							 | 
						||
| 
								 | 
							
								  import stream = require('stream');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export enum ConnectionStates {
							 | 
						||
| 
								 | 
							
								    disconnected = 0,
							 | 
						||
| 
								 | 
							
								    connected = 1,
							 | 
						||
| 
								 | 
							
								    connecting = 2,
							 | 
						||
| 
								 | 
							
								    disconnecting = 3,
							 | 
						||
| 
								 | 
							
								    uninitialized = 99,
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class NativeDate extends global.Date {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** The Mongoose Date [SchemaType](/docs/schematypes.html). */
							 | 
						||
| 
								 | 
							
								  export type Date = Schema.Types.Date;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * The Mongoose Decimal128 [SchemaType](/docs/schematypes.html). Used for
							 | 
						||
| 
								 | 
							
								   * declaring paths in your schema that should be
							 | 
						||
| 
								 | 
							
								   * [128-bit decimal floating points](http://thecodebarbarian.com/a-nodejs-perspective-on-mongodb-34-decimal.html).
							 | 
						||
| 
								 | 
							
								   * Do not use this to create a new Decimal128 instance, use `mongoose.Types.Decimal128`
							 | 
						||
| 
								 | 
							
								   * instead.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export type Decimal128 = Schema.Types.Decimal128;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * The Mongoose Mixed [SchemaType](/docs/schematypes.html). Used for
							 | 
						||
| 
								 | 
							
								   * declaring paths in your schema that Mongoose's change tracking, casting,
							 | 
						||
| 
								 | 
							
								   * and validation should ignore.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export type Mixed = Schema.Types.Mixed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * 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) => typeof mongoose;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * The Mongoose Number [SchemaType](/docs/schematypes.html). Used for
							 | 
						||
| 
								 | 
							
								   * declaring paths in your schema that Mongoose should cast to numbers.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export type Number = Schema.Types.Number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * The Mongoose ObjectId [SchemaType](/docs/schematypes.html). Used for
							 | 
						||
| 
								 | 
							
								   * declaring paths in your schema that should be
							 | 
						||
| 
								 | 
							
								   * [MongoDB ObjectIds](https://docs.mongodb.com/manual/reference/method/ObjectId/).
							 | 
						||
| 
								 | 
							
								   * Do not use this to create a new ObjectId instance, use `mongoose.Types.ObjectId`
							 | 
						||
| 
								 | 
							
								   * instead.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export type ObjectId = Schema.Types.ObjectId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export let Promise: any;
							 | 
						||
| 
								 | 
							
								  export const PromiseProvider: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** The various Mongoose SchemaTypes. */
							 | 
						||
| 
								 | 
							
								  export const SchemaTypes: typeof Schema.Types;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Expose connection states for user-land */
							 | 
						||
| 
								 | 
							
								  export const STATES: typeof ConnectionStates;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Opens Mongoose's default connection to MongoDB, see [connections docs](https://mongoosejs.com/docs/connections.html) */
							 | 
						||
| 
								 | 
							
								  export function connect(uri: string, options: ConnectOptions, callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								  export function connect(uri: string, callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								  export function connect(uri: string, options?: ConnectOptions): Promise<Mongoose>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** The Mongoose module's default connection. Equivalent to `mongoose.connections[0]`, see [`connections`](#mongoose_Mongoose-connections). */
							 | 
						||
| 
								 | 
							
								  export const connection: Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** An array containing all connections associated with this Mongoose instance. */
							 | 
						||
| 
								 | 
							
								  export const connections: Connection[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** An array containing all models associated with this Mongoose instance. */
							 | 
						||
| 
								 | 
							
								  export const models: { [index: string]: Model<any> };
							 | 
						||
| 
								 | 
							
								  /** Creates a Connection instance. */
							 | 
						||
| 
								 | 
							
								  export function createConnection(uri: string, options?: ConnectOptions): Connection & Promise<Connection>;
							 | 
						||
| 
								 | 
							
								  export function createConnection(): Connection;
							 | 
						||
| 
								 | 
							
								  export function createConnection(uri: string, options: ConnectOptions, callback: Callback<Connection>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * 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): typeof mongoose;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export function disconnect(): Promise<void>;
							 | 
						||
| 
								 | 
							
								  export function disconnect(cb: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Gets mongoose options */
							 | 
						||
| 
								 | 
							
								  export function get<K extends keyof MongooseOptions>(key: K): MongooseOptions[K];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Returns true if Mongoose can cast the given value to an ObjectId, or
							 | 
						||
| 
								 | 
							
								   * false otherwise.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export function isValidObjectId(v: any): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export function model<T>(name: string, schema?: Schema<any>, collection?: string, skipInit?: boolean): Model<T>;
							 | 
						||
| 
								 | 
							
								  export function model<T, U extends Model<T, TQueryHelpers, any>, TQueryHelpers = {}>(
							 | 
						||
| 
								 | 
							
								    name: string,
							 | 
						||
| 
								 | 
							
								    schema?: Schema<T, U, TQueryHelpers>,
							 | 
						||
| 
								 | 
							
								    collection?: string,
							 | 
						||
| 
								 | 
							
								    skipInit?: boolean
							 | 
						||
| 
								 | 
							
								  ): U;
							 | 
						||
| 
								 | 
							
								  export function model<T, U extends Model<T, TQueryHelpers, any>, TQueryHelpers = {}>(
							 | 
						||
| 
								 | 
							
								    name: string,
							 | 
						||
| 
								 | 
							
								    schema?: Schema<any>,
							 | 
						||
| 
								 | 
							
								    collection?: string,
							 | 
						||
| 
								 | 
							
								    skipInit?: boolean
							 | 
						||
| 
								 | 
							
								  ): U;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Returns an array of model names created on this instance of Mongoose. */
							 | 
						||
| 
								 | 
							
								  export function modelNames(): Array<string>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** The node-mongodb-native driver Mongoose uses. */
							 | 
						||
| 
								 | 
							
								  export const mongo: typeof mongodb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Mongoose uses this function to get the current time when setting
							 | 
						||
| 
								 | 
							
								   * [timestamps](/docs/guide.html#timestamps). You may stub out this function
							 | 
						||
| 
								 | 
							
								   * using a tool like [Sinon](https://www.npmjs.com/package/sinon) for testing.
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export function now(): NativeDate;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Declares a global plugin executed on all Schemas. */
							 | 
						||
| 
								 | 
							
								  export function plugin(fn: (schema: Schema, opts?: any) => void, opts?: any): typeof 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<K extends keyof MongooseOptions>(key: K, value: MongooseOptions[K]): typeof mongoose;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * _Requires MongoDB >= 3.6.0._ Starts a [MongoDB session](https://docs.mongodb.com/manual/release-notes/3.6/#client-sessions)
							 | 
						||
| 
								 | 
							
								   * for benefits like causal consistency, [retryable writes](https://docs.mongodb.com/manual/core/retryable-writes/),
							 | 
						||
| 
								 | 
							
								   * and [transactions](http://thecodebarbarian.com/a-node-js-perspective-on-mongodb-4-transactions.html).
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export function startSession(options?: mongodb.SessionOptions): Promise<mongodb.ClientSession>;
							 | 
						||
| 
								 | 
							
								  export function startSession(options: mongodb.SessionOptions, cb: Callback<mongodb.ClientSession>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** The Mongoose version */
							 | 
						||
| 
								 | 
							
								  export const version: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type CastError = Error.CastError;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type Mongoose = typeof mongoose;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface MongooseOptions {
							 | 
						||
| 
								 | 
							
								    /** true by default. Set to false to skip applying global plugins to child schemas */
							 | 
						||
| 
								 | 
							
								    applyPluginsToChildSchemas?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * false by default. Set to true to apply global plugins to discriminator schemas.
							 | 
						||
| 
								 | 
							
								     * This typically isn't necessary because plugins are applied to the base schema and
							 | 
						||
| 
								 | 
							
								     * discriminators copy all middleware, methods, statics, and properties from the base schema.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    applyPluginsToDiscriminators?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Set to `true` to make Mongoose call` Model.createCollection()` automatically when you
							 | 
						||
| 
								 | 
							
								     * create a model with `mongoose.model()` or `conn.model()`. This is useful for testing
							 | 
						||
| 
								 | 
							
								     * transactions, change streams, and other features that require the collection to exist.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    autoCreate?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * true by default. Set to false to disable automatic index creation
							 | 
						||
| 
								 | 
							
								     * for all models associated with this Mongoose instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    autoIndex?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** enable/disable mongoose's buffering mechanism for all connections and models */
							 | 
						||
| 
								 | 
							
								    bufferCommands?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bufferTimeoutMS?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** false by default. Set to `true` to `clone()` all schemas before compiling into a model. */
							 | 
						||
| 
								 | 
							
								    cloneSchemas?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If `true`, prints the operations mongoose sends to MongoDB to the console.
							 | 
						||
| 
								 | 
							
								     * If a writable stream is passed, it will log to that stream, without colorization.
							 | 
						||
| 
								 | 
							
								     * If a callback function is passed, it will receive the collection name, the method
							 | 
						||
| 
								 | 
							
								     * name, then all arguments passed to the method. For example, if you wanted to
							 | 
						||
| 
								 | 
							
								     * replicate the default logging, you could output from the callback
							 | 
						||
| 
								 | 
							
								     * `Mongoose: ${collectionName}.${methodName}(${methodArgs.join(', ')})`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    debug?:
							 | 
						||
| 
								 | 
							
								      | boolean
							 | 
						||
| 
								 | 
							
								      | { color?: boolean; shell?: boolean }
							 | 
						||
| 
								 | 
							
								      | stream.Writable
							 | 
						||
| 
								 | 
							
								      | ((collectionName: string, methodName: string, ...methodArgs: any[]) => void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If set, attaches [maxTimeMS](https://docs.mongodb.com/manual/reference/operator/meta/maxTimeMS/) to every query */
							 | 
						||
| 
								 | 
							
								    maxTimeMS?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * true by default. Mongoose adds a getter to MongoDB ObjectId's called `_id` that
							 | 
						||
| 
								 | 
							
								     * returns `this` for convenience with populate. Set this to false to remove the getter.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    objectIdGetter?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Set to `true` to default to overwriting models with the same name when calling
							 | 
						||
| 
								 | 
							
								     * `mongoose.model()`, as opposed to throwing an `OverwriteModelError`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    overwriteModels?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If `false`, changes the default `returnOriginal` option to `findOneAndUpdate()`,
							 | 
						||
| 
								 | 
							
								     * `findByIdAndUpdate`, and `findOneAndReplace()` to false. This is equivalent to
							 | 
						||
| 
								 | 
							
								     * setting the `new` option to `true` for `findOneAndX()` calls by default. Read our
							 | 
						||
| 
								 | 
							
								     * `findOneAndUpdate()` [tutorial](https://mongoosejs.com/docs/tutorials/findoneandupdate.html)
							 | 
						||
| 
								 | 
							
								     * for more information.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    returnOriginal?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * false by default. Set to true to enable [update validators](
							 | 
						||
| 
								 | 
							
								     * https://mongoosejs.com/docs/validation.html#update-validators
							 | 
						||
| 
								 | 
							
								     * ) for all validators by default.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    runValidators?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sanitizeProjection?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * true by default. Set to false to opt out of Mongoose adding all fields that you `populate()`
							 | 
						||
| 
								 | 
							
								     * to your `select()`. The schema-level option `selectPopulatedPaths` overwrites this one.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    selectPopulatedPaths?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    setDefaultsOnInsert?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** true by default, may be `false`, `true`, or `'throw'`. Sets the default strict mode for schemas. */
							 | 
						||
| 
								 | 
							
								    strict?: boolean | 'throw';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * false by default, may be `false`, `true`, or `'throw'`. Sets the default
							 | 
						||
| 
								 | 
							
								     * [strictQuery](https://mongoosejs.com/docs/guide.html#strictQuery) mode for schemas.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    strictQuery?: boolean | 'throw';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * `{ transform: true, flattenDecimals: true }` by default. Overwrites default objects to
							 | 
						||
| 
								 | 
							
								     * `toJSON()`, for determining how Mongoose documents get serialized by `JSON.stringify()`
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    toJSON?: ToObjectOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** `{ transform: true, flattenDecimals: true }` by default. Overwrites default objects to `toObject()` */
							 | 
						||
| 
								 | 
							
								    toObject?: ToObjectOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** true by default, may be `false` or `true`. Sets the default typePojoToMixed for schemas. */
							 | 
						||
| 
								 | 
							
								    typePojoToMixed?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * false by default. Set to `true` to make Mongoose's default index build use `createIndex()`
							 | 
						||
| 
								 | 
							
								     * instead of `ensureIndex()` to avoid deprecation warnings from the MongoDB driver.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    useCreateIndex?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * true by default. Set to `false` to make `findOneAndUpdate()` and `findOneAndRemove()`
							 | 
						||
| 
								 | 
							
								     * use native `findOneAndUpdate()` rather than `findAndModify()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    useFindAndModify?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** false by default. Set to `true` to make all connections set the `useNewUrlParser` option by default */
							 | 
						||
| 
								 | 
							
								    useNewUrlParser?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    usePushEach?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** false by default. Set to `true` to make all connections set the `useUnifiedTopology` option by default */
							 | 
						||
| 
								 | 
							
								    useUnifiedTopology?: boolean;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line @typescript-eslint/no-empty-interface
							 | 
						||
| 
								 | 
							
								  interface ClientSession extends mongodb.ClientSession { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ConnectOptions extends mongodb.MongoClientOptions {
							 | 
						||
| 
								 | 
							
								    /** Set to false to [disable buffering](http://mongoosejs.com/docs/faq.html#callback_never_executes) on all models associated with this connection. */
							 | 
						||
| 
								 | 
							
								    bufferCommands?: boolean;
							 | 
						||
| 
								 | 
							
								    /** The name of the database you want to use. If not provided, Mongoose uses the database name from connection string. */
							 | 
						||
| 
								 | 
							
								    dbName?: string;
							 | 
						||
| 
								 | 
							
								    /** username for authentication, equivalent to `options.auth.user`. Maintained for backwards compatibility. */
							 | 
						||
| 
								 | 
							
								    user?: string;
							 | 
						||
| 
								 | 
							
								    /** password for authentication, equivalent to `options.auth.password`. Maintained for backwards compatibility. */
							 | 
						||
| 
								 | 
							
								    pass?: string;
							 | 
						||
| 
								 | 
							
								    /** Set to false to disable automatic index creation for all models associated with this connection. */
							 | 
						||
| 
								 | 
							
								    autoIndex?: boolean;
							 | 
						||
| 
								 | 
							
								    /** True by default. Set to `false` to make `findOneAndUpdate()` and `findOneAndRemove()` use native `findOneAndUpdate()` rather than `findAndModify()`. */
							 | 
						||
| 
								 | 
							
								    useFindAndModify?: boolean;
							 | 
						||
| 
								 | 
							
								    /** Set to `true` to make Mongoose automatically call `createCollection()` on every model created on this connection. */
							 | 
						||
| 
								 | 
							
								    autoCreate?: boolean;
							 | 
						||
| 
								 | 
							
								    /** False by default. If `true`, this connection will use `createIndex()` instead of `ensureIndex()` for automatic index builds via `Model.init()`. */
							 | 
						||
| 
								 | 
							
								    useCreateIndex?: boolean;
							 | 
						||
| 
								 | 
							
								    /** false by default. Set to `true` to make all connections set the `useNewUrlParser` option by default */
							 | 
						||
| 
								 | 
							
								    useNewUrlParser?: boolean;
							 | 
						||
| 
								 | 
							
								    /** false by default. Set to `true` to make all connections set the `useUnifiedTopology` option by default */
							 | 
						||
| 
								 | 
							
								    useUnifiedTopology?: boolean;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Connection extends events.EventEmitter {
							 | 
						||
| 
								 | 
							
								    /** Closes the connection */
							 | 
						||
| 
								 | 
							
								    close(callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								    close(force: boolean, callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								    close(force?: boolean): Promise<void>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Retrieves a collection, creating it if not cached. */
							 | 
						||
| 
								 | 
							
								    collection(name: string, options?: mongodb.CollectionCreateOptions): Collection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** A hash of the collections associated with this connection */
							 | 
						||
| 
								 | 
							
								    collections: { [index: string]: Collection };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** A hash of the global options that are associated with this connection */
							 | 
						||
| 
								 | 
							
								    config: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The mongodb.Db instance, set when the connection is opened */
							 | 
						||
| 
								 | 
							
								    db: mongodb.Db;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Helper for `createCollection()`. Will explicitly create the given collection
							 | 
						||
| 
								 | 
							
								     * with specified options. Used to create [capped collections](https://docs.mongodb.com/manual/core/capped-collections/)
							 | 
						||
| 
								 | 
							
								     * and [views](https://docs.mongodb.com/manual/core/views/) from mongoose.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    createCollection<T = any>(name: string, options?: mongodb.CollectionCreateOptions): Promise<mongodb.Collection<T>>;
							 | 
						||
| 
								 | 
							
								    createCollection<T = any>(name: string, cb: Callback<mongodb.Collection<T>>): void;
							 | 
						||
| 
								 | 
							
								    createCollection<T = any>(name: string, options: mongodb.CollectionCreateOptions, cb?: Callback<mongodb.Collection>): Promise<mongodb.Collection<T>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Removes the model named `name` from this connection, if it exists. You can
							 | 
						||
| 
								 | 
							
								     * use this function to clean up any models you created in your tests to
							 | 
						||
| 
								 | 
							
								     * prevent OverwriteModelErrors.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    deleteModel(name: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Helper for `dropCollection()`. Will delete the given collection, including
							 | 
						||
| 
								 | 
							
								     * all documents and indexes.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    dropCollection(collection: string): Promise<void>;
							 | 
						||
| 
								 | 
							
								    dropCollection(collection: string, cb: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Helper for `dropDatabase()`. Deletes the given database, including all
							 | 
						||
| 
								 | 
							
								     * collections, documents, and indexes.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    dropDatabase(): Promise<void>;
							 | 
						||
| 
								 | 
							
								    dropDatabase(cb: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets the value of the option `key`. Equivalent to `conn.options[key]` */
							 | 
						||
| 
								 | 
							
								    get(key: string): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns the [MongoDB driver `MongoClient`](http://mongodb.github.io/node-mongodb-native/3.5/api/MongoClient.html) instance
							 | 
						||
| 
								 | 
							
								     * that this connection uses to talk to MongoDB.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    getClient(): mongodb.MongoClient;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The host name portion of the URI. If multiple hosts, such as a replica set,
							 | 
						||
| 
								 | 
							
								     * this will contain the first host name in the URI
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    host: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A number identifier for this connection. Used for debugging when
							 | 
						||
| 
								 | 
							
								     * you have [multiple connections](/docs/connections.html#multiple_connections).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    id: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A [POJO](https://masteringjs.io/tutorials/fundamentals/pojo) containing
							 | 
						||
| 
								 | 
							
								     * a map from model names to models. Contains all models that have been
							 | 
						||
| 
								 | 
							
								     * added to this connection using [`Connection#model()`](/docs/api/connection.html#connection_Connection-model).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    models: { [index: string]: Model<any> };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines or retrieves a model. */
							 | 
						||
| 
								 | 
							
								    model<T>(name: string, schema?: Schema<any>, collection?: string): Model<T>;
							 | 
						||
| 
								 | 
							
								    model<T, U extends Model<T, TQueryHelpers, any>, TQueryHelpers = {}>(
							 | 
						||
| 
								 | 
							
								      name: string,
							 | 
						||
| 
								 | 
							
								      schema?: Schema<T, U, TQueryHelpers>,
							 | 
						||
| 
								 | 
							
								      collection?: string,
							 | 
						||
| 
								 | 
							
								      skipInit?: boolean
							 | 
						||
| 
								 | 
							
								    ): U;
							 | 
						||
| 
								 | 
							
								    model<T, U extends Model<T, TQueryHelpers, any>, TQueryHelpers = {}>(
							 | 
						||
| 
								 | 
							
								      name: string,
							 | 
						||
| 
								 | 
							
								      schema?: Schema<any>,
							 | 
						||
| 
								 | 
							
								      collection?: string,
							 | 
						||
| 
								 | 
							
								      skipInit?: boolean
							 | 
						||
| 
								 | 
							
								    ): U;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns an array of model names created on this connection. */
							 | 
						||
| 
								 | 
							
								    modelNames(): Array<string>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The name of the database this connection points to. */
							 | 
						||
| 
								 | 
							
								    name: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Opens the connection with a URI using `MongoClient.connect()`. */
							 | 
						||
| 
								 | 
							
								    openUri(uri: string, options?: ConnectOptions): Promise<Connection>;
							 | 
						||
| 
								 | 
							
								    openUri(uri: string, callback: (err: CallbackError, conn?: Connection) => void): Connection;
							 | 
						||
| 
								 | 
							
								    openUri(uri: string, options: ConnectOptions, callback: (err: CallbackError, conn?: Connection) => void): Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The password specified in the URI */
							 | 
						||
| 
								 | 
							
								    pass: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The port portion of the URI. If multiple hosts, such as a replica set,
							 | 
						||
| 
								 | 
							
								     * this will contain the port from the first host name in the URI.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    port: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares a plugin executed on all schemas you pass to `conn.model()` */
							 | 
						||
| 
								 | 
							
								    plugin(fn: (schema: Schema, opts?: any) => void, opts?: any): Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The plugins that will be applied to all models created on this connection. */
							 | 
						||
| 
								 | 
							
								    plugins: Array<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Connection ready state
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * - 0 = disconnected
							 | 
						||
| 
								 | 
							
								     * - 1 = connected
							 | 
						||
| 
								 | 
							
								     * - 2 = connecting
							 | 
						||
| 
								 | 
							
								     * - 3 = disconnecting
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    readyState: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the value of the option `key`. Equivalent to `conn.options[key] = val` */
							 | 
						||
| 
								 | 
							
								    set(key: string, value: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Set the [MongoDB driver `MongoClient`](http://mongodb.github.io/node-mongodb-native/3.5/api/MongoClient.html) instance
							 | 
						||
| 
								 | 
							
								     * that this connection uses to talk to MongoDB. This is useful if you already have a MongoClient instance, and want to
							 | 
						||
| 
								 | 
							
								     * reuse it.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    setClient(client: mongodb.MongoClient): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * _Requires MongoDB >= 3.6.0._ Starts a [MongoDB session](https://docs.mongodb.com/manual/release-notes/3.6/#client-sessions)
							 | 
						||
| 
								 | 
							
								     * for benefits like causal consistency, [retryable writes](https://docs.mongodb.com/manual/core/retryable-writes/),
							 | 
						||
| 
								 | 
							
								     * and [transactions](http://thecodebarbarian.com/a-node-js-perspective-on-mongodb-4-transactions.html).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    startSession(options?: mongodb.SessionOptions): Promise<mongodb.ClientSession>;
							 | 
						||
| 
								 | 
							
								    startSession(options: mongodb.SessionOptions, cb: Callback<mongodb.ClientSession>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * _Requires MongoDB >= 3.6.0._ Executes the wrapped async function
							 | 
						||
| 
								 | 
							
								     * in a transaction. Mongoose will commit the transaction if the
							 | 
						||
| 
								 | 
							
								     * async function executes successfully and attempt to retry if
							 | 
						||
| 
								 | 
							
								     * there was a retriable error.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    transaction(fn: (session: mongodb.ClientSession) => Promise<any>): Promise<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Switches to a different database using the same connection pool. */
							 | 
						||
| 
								 | 
							
								    useDb(name: string, options?: { useCache?: boolean, noListener?: boolean }): Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The username specified in the URI */
							 | 
						||
| 
								 | 
							
								    user: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Watches the entire underlying database for changes. Similar to [`Model.watch()`](/docs/api/model.html#model_Model.watch). */
							 | 
						||
| 
								 | 
							
								    watch(pipeline?: Array<any>, options?: mongodb.ChangeStreamOptions): mongodb.ChangeStream;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   /*
							 | 
						||
| 
								 | 
							
								   * section collection.js
							 | 
						||
| 
								 | 
							
								   * http://mongoosejs.com/docs/api.html#collection-js
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  interface CollectionBase extends mongodb.Collection {
							 | 
						||
| 
								 | 
							
								    /*
							 | 
						||
| 
								 | 
							
								      * Abstract methods. Some of these are already defined on the
							 | 
						||
| 
								 | 
							
								      * mongodb.Collection interface so they've been commented out.
							 | 
						||
| 
								 | 
							
								      */
							 | 
						||
| 
								 | 
							
								    ensureIndex(...args: any[]): any;
							 | 
						||
| 
								 | 
							
								    findAndModify(...args: any[]): any;
							 | 
						||
| 
								 | 
							
								    getIndexes(...args: any[]): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The collection name */
							 | 
						||
| 
								 | 
							
								    collectionName: string;
							 | 
						||
| 
								 | 
							
								    /** The Connection instance */
							 | 
						||
| 
								 | 
							
								    conn: Connection;
							 | 
						||
| 
								 | 
							
								    /** The collection name */
							 | 
						||
| 
								 | 
							
								    name: string;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /*
							 | 
						||
| 
								 | 
							
								   * section drivers/node-mongodb-native/collection.js
							 | 
						||
| 
								 | 
							
								   * http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-collection-js
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  let Collection: Collection;
							 | 
						||
| 
								 | 
							
								  interface Collection extends CollectionBase {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Collection constructor
							 | 
						||
| 
								 | 
							
								     * @param name name of the collection
							 | 
						||
| 
								 | 
							
								     * @param conn A MongooseConnection instance
							 | 
						||
| 
								 | 
							
								     * @param opts optional collection options
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    // eslint-disable-next-line @typescript-eslint/no-misused-new
							 | 
						||
| 
								 | 
							
								    new(name: string, conn: Connection, opts?: any): Collection;
							 | 
						||
| 
								 | 
							
								    /** Formatter for debug print args */
							 | 
						||
| 
								 | 
							
								    $format(arg: any): string;
							 | 
						||
| 
								 | 
							
								    /** Debug print helper */
							 | 
						||
| 
								 | 
							
								    $print(name: any, i: any, args: any[]): void;
							 | 
						||
| 
								 | 
							
								    /** Retrieves information about this collections indexes. */
							 | 
						||
| 
								 | 
							
								    getIndexes(): any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Document<T = any, TQueryHelpers = any, DocType = any> {
							 | 
						||
| 
								 | 
							
								    constructor(doc?: any);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** This documents _id. */
							 | 
						||
| 
								 | 
							
								    _id?: T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** This documents __v. */
							 | 
						||
| 
								 | 
							
								    __v?: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Get all subdocs (by bfs) */
							 | 
						||
| 
								 | 
							
								    $getAllSubdocs(): Document[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Don't run validation on this path or persist changes to this path. */
							 | 
						||
| 
								 | 
							
								    $ignore(path: string): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Checks if a path is set to its default. */
							 | 
						||
| 
								 | 
							
								    $isDefault(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Getter/setter, determines whether the document was removed or not. */
							 | 
						||
| 
								 | 
							
								    $isDeleted(val?: boolean): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns an array of all populated documents associated with the query */
							 | 
						||
| 
								 | 
							
								    $getPopulatedDocs(): Document[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if the given path is nullish or only contains empty objects.
							 | 
						||
| 
								 | 
							
								     * Useful for determining whether this subdoc will get stripped out by the
							 | 
						||
| 
								 | 
							
								     * [minimize option](/docs/guide.html#minimize).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    $isEmpty(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Checks if a path is invalid */
							 | 
						||
| 
								 | 
							
								    $isValid(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Empty object that you can use for storing properties on the document. This
							 | 
						||
| 
								 | 
							
								     * is handy for passing data to middleware without conflicting with Mongoose
							 | 
						||
| 
								 | 
							
								     * internals.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    $locals: Record<string, unknown>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Marks a path as valid, removing existing validation errors. */
							 | 
						||
| 
								 | 
							
								    $markValid(path: string): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A string containing the current operation that Mongoose is executing
							 | 
						||
| 
								 | 
							
								     * on this document. May be `null`, `'save'`, `'validate'`, or `'remove'`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    $op: string | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Getter/setter around the session associated with this document. Used to
							 | 
						||
| 
								 | 
							
								     * automatically set `session` if you `save()` a doc that you got from a
							 | 
						||
| 
								 | 
							
								     * query with an associated session.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    $session(session?: mongodb.ClientSession | null): mongodb.ClientSession;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Alias for `set()`, used internally to avoid conflicts */
							 | 
						||
| 
								 | 
							
								    $set(path: string, val: any, options?: any): this;
							 | 
						||
| 
								 | 
							
								    $set(path: string, val: any, type: any, options?: any): this;
							 | 
						||
| 
								 | 
							
								    $set(value: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Set this property to add additional query filters when Mongoose saves this document and `isNew` is false. */
							 | 
						||
| 
								 | 
							
								    $where: Record<string, unknown>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If this is a discriminator model, `baseModelName` is the name of the base model. */
							 | 
						||
| 
								 | 
							
								    baseModelName?: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Collection the model uses. */
							 | 
						||
| 
								 | 
							
								    collection: Collection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Connection the model uses. */
							 | 
						||
| 
								 | 
							
								    db: Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Removes this document from the db. */
							 | 
						||
| 
								 | 
							
								    delete(options?: QueryOptions): QueryWithHelpers<any, this, TQueryHelpers>;
							 | 
						||
| 
								 | 
							
								    delete(options: QueryOptions, cb?: Callback): void;
							 | 
						||
| 
								 | 
							
								    delete(cb: Callback): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Removes this document from the db. */
							 | 
						||
| 
								 | 
							
								    deleteOne(options?: QueryOptions): QueryWithHelpers<any, this, TQueryHelpers>;
							 | 
						||
| 
								 | 
							
								    deleteOne(options: QueryOptions, cb?: Callback): void;
							 | 
						||
| 
								 | 
							
								    deleteOne(cb: Callback): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Takes a populated field and returns it to its unpopulated state. */
							 | 
						||
| 
								 | 
							
								    depopulate(path: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns the list of paths that have been directly modified. A direct
							 | 
						||
| 
								 | 
							
								     * modified path is a path that you explicitly set, whether via `doc.foo = 'bar'`,
							 | 
						||
| 
								 | 
							
								     * `Object.assign(doc, { foo: 'bar' })`, or `doc.set('foo', 'bar')`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    directModifiedPaths(): Array<string>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if this document is equal to another document.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * Documents are considered equal when they have matching `_id`s, unless neither
							 | 
						||
| 
								 | 
							
								     * document has an `_id`, in which case this function falls back to using
							 | 
						||
| 
								 | 
							
								     * `deepEqual()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    equals(doc: Document<T>): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Hash containing current validation errors. */
							 | 
						||
| 
								 | 
							
								    errors?: Error.ValidationError;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Explicitly executes population and returns a promise. Useful for promises integration. */
							 | 
						||
| 
								 | 
							
								    execPopulate(): Promise<this>;
							 | 
						||
| 
								 | 
							
								    execPopulate(callback: Callback<this>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the value of a path. */
							 | 
						||
| 
								 | 
							
								    get(path: string, type?: any, options?: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns the changes that happened to the document
							 | 
						||
| 
								 | 
							
								     * in the format that will be sent to MongoDB.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    getChanges(): UpdateQuery<this>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The string version of this documents _id. */
							 | 
						||
| 
								 | 
							
								    id?: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Signal that we desire an increment of this documents version. */
							 | 
						||
| 
								 | 
							
								    increment(): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Initializes the document without setters or marking anything modified.
							 | 
						||
| 
								 | 
							
								     * Called internally after a document is returned from mongodb. Normally,
							 | 
						||
| 
								 | 
							
								     * you do **not** need to call this function on your own.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    init(obj: any, opts?: any, cb?: Callback<this>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Marks a path as invalid, causing validation to fail. */
							 | 
						||
| 
								 | 
							
								    invalidate(path: string, errorMsg: string | NativeError, value?: any, kind?: string): NativeError | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns true if `path` was directly set and modified, else false. */
							 | 
						||
| 
								 | 
							
								    isDirectModified(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Checks if `path` was explicitly selected. If no projection, always returns true. */
							 | 
						||
| 
								 | 
							
								    isDirectSelected(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Checks if `path` is in the `init` state, that is, it was set by `Document#init()` and not modified since. */
							 | 
						||
| 
								 | 
							
								    isInit(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if any of the given paths is modified, else false. If no arguments, returns `true` if any path
							 | 
						||
| 
								 | 
							
								     * in this document is modified.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    isModified(path?: string | Array<string>): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Boolean flag specifying if the document is new. */
							 | 
						||
| 
								 | 
							
								    isNew: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Checks if `path` was selected in the source query which initialized this document. */
							 | 
						||
| 
								 | 
							
								    isSelected(path: string): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Marks the path as having pending changes to write to the db. */
							 | 
						||
| 
								 | 
							
								    markModified(path: string, scope?: any): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the list of paths that have been modified. */
							 | 
						||
| 
								 | 
							
								    modifiedPaths(options?: { includeChildren?: boolean }): Array<string>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns another Model instance. */
							 | 
						||
| 
								 | 
							
								    model<T extends Model<any>>(name: string): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The name of the model */
							 | 
						||
| 
								 | 
							
								    modelName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Overwrite all values in this document with the values of `obj`, except
							 | 
						||
| 
								 | 
							
								     * for immutable properties. Behaves similarly to `set()`, except for it
							 | 
						||
| 
								 | 
							
								     * unsets all properties that aren't in `obj`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    overwrite(obj: DocumentDefinition<this>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If this document is a subdocument or populated document, returns the
							 | 
						||
| 
								 | 
							
								     * document's parent. Returns undefined otherwise.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    $parent(): Document | undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Populates document references, executing the `callback` when complete.
							 | 
						||
| 
								 | 
							
								     * If you want to use promises instead, use this function with
							 | 
						||
| 
								 | 
							
								     * [`execPopulate()`](#document_Document-execPopulate).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    populate(path: string, callback?: Callback<this>): this;
							 | 
						||
| 
								 | 
							
								    populate(path: string, names: string, callback?: Callback<this>): this;
							 | 
						||
| 
								 | 
							
								    populate(opts: PopulateOptions | Array<PopulateOptions>, callback?: Callback<this>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets _id(s) used during population of the given `path`. If the path was not populated, returns `undefined`. */
							 | 
						||
| 
								 | 
							
								    populated(path: string): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Removes this document from the db. */
							 | 
						||
| 
								 | 
							
								    remove(options?: QueryOptions): Promise<this>;
							 | 
						||
| 
								 | 
							
								    remove(options?: QueryOptions, cb?: Callback): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sends a replaceOne command with this document `_id` as the query selector. */
							 | 
						||
| 
								 | 
							
								    replaceOne(replacement?: DocumentDefinition<this>, options?: QueryOptions | null, callback?: Callback): Query<any, this>;
							 | 
						||
| 
								 | 
							
								    replaceOne(replacement?: Object, options?: QueryOptions | null, callback?: Callback): Query<any, this>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Saves this document by inserting a new document into the database if [document.isNew](/docs/api.html#document_Document-isNew) is `true`, or sends an [updateOne](/docs/api.html#document_Document-updateOne) operation with just the modified paths if `isNew` is `false`. */
							 | 
						||
| 
								 | 
							
								    save(options?: SaveOptions): Promise<this>;
							 | 
						||
| 
								 | 
							
								    save(options?: SaveOptions, fn?: Callback<this>): void;
							 | 
						||
| 
								 | 
							
								    save(fn?: Callback<this>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The document's schema. */
							 | 
						||
| 
								 | 
							
								    schema: Schema;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the value of a path, or many paths. */
							 | 
						||
| 
								 | 
							
								    set(path: string, val: any, options?: any): this;
							 | 
						||
| 
								 | 
							
								    set(path: string, val: any, type: any, options?: any): this;
							 | 
						||
| 
								 | 
							
								    set(value: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The return value of this method is used in calls to JSON.stringify(doc). */
							 | 
						||
| 
								 | 
							
								    toJSON(options?: ToObjectOptions): LeanDocument<this>;
							 | 
						||
| 
								 | 
							
								    toJSON<T = DocType>(options?: ToObjectOptions): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Converts this document into a plain-old JavaScript object ([POJO](https://masteringjs.io/tutorials/fundamentals/pojo)). */
							 | 
						||
| 
								 | 
							
								    toObject(options?: ToObjectOptions): LeanDocument<this>;
							 | 
						||
| 
								 | 
							
								    toObject<T = DocType>(options?: ToObjectOptions): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Clears the modified state on the specified path. */
							 | 
						||
| 
								 | 
							
								    unmarkModified(path: string): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sends an update command with this document `_id` as the query selector. */
							 | 
						||
| 
								 | 
							
								    update(update?: UpdateQuery<this> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback): Query<any, this>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sends an updateOne command with this document `_id` as the query selector. */
							 | 
						||
| 
								 | 
							
								    updateOne(update?: UpdateQuery<this> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback): Query<any, this>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Executes registered validation rules for this document. */
							 | 
						||
| 
								 | 
							
								    validate(options:{ pathsToSkip?: pathsToSkip }): Promise<void>;
							 | 
						||
| 
								 | 
							
								    validate(pathsToValidate?: pathsToValidate, options?: any): Promise<void>;
							 | 
						||
| 
								 | 
							
								    validate(callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								    validate(pathsToValidate: pathsToValidate, callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								    validate(pathsToValidate: pathsToValidate, options: any, callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Executes registered validation rules (skipping asynchronous validators) for this document. */
							 | 
						||
| 
								 | 
							
								    validateSync(options:{pathsToSkip?: pathsToSkip, [k:string]: any }): Error.ValidationError | null;
							 | 
						||
| 
								 | 
							
								    validateSync(pathsToValidate?: Array<string>, options?: any): Error.ValidationError | null;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** A list of paths to validate. If set, Mongoose will validate only the modified paths that are in the given list. */
							 | 
						||
| 
								 | 
							
								  type pathsToValidate = string[] | string;
							 | 
						||
| 
								 | 
							
								  /** A list of paths to skip. If set, Mongoose will validate every modified path that is not in this list. */
							 | 
						||
| 
								 | 
							
								  type pathsToSkip = string[] | string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface AcceptsDiscriminator {
							 | 
						||
| 
								 | 
							
								    /** Adds a discriminator type. */
							 | 
						||
| 
								 | 
							
								    discriminator<D>(name: string | number, schema: Schema, value?: string | number | ObjectId): Model<D>;
							 | 
						||
| 
								 | 
							
								    discriminator<T, U>(name: string | number, schema: Schema<T, U>, value?: string | number | ObjectId): U;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type AnyKeys<T> = { [P in keyof T]?: T[P] | any };
							 | 
						||
| 
								 | 
							
								  interface AnyObject { [k: string]: any }
							 | 
						||
| 
								 | 
							
								  type EnforceDocument<T, TMethods> = T extends Document ? T : T & Document<any, any, T> & TMethods;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface IndexesDiff {
							 | 
						||
| 
								 | 
							
								    /** Indexes that would be created in mongodb. */
							 | 
						||
| 
								 | 
							
								    toCreate: Array<any>
							 | 
						||
| 
								 | 
							
								    /** Indexes that would be dropped in mongodb. */
							 | 
						||
| 
								 | 
							
								    toDrop: Array<any>
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export const Model: Model<any>;
							 | 
						||
| 
								 | 
							
								  interface Model<T, TQueryHelpers = {}, TMethods = {}> extends NodeJS.EventEmitter, AcceptsDiscriminator {
							 | 
						||
| 
								 | 
							
								    new(doc?: AnyKeys<T> & AnyObject): EnforceDocument<T, TMethods>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    aggregate<R = any>(pipeline?: any[]): Aggregate<Array<R>>;
							 | 
						||
| 
								 | 
							
								    aggregate<R = any>(pipeline: any[], cb: Function): Promise<Array<R>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Base Mongoose instance the model uses. */
							 | 
						||
| 
								 | 
							
								    base: typeof mongoose;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If this is a discriminator model, `baseModelName` is the name of
							 | 
						||
| 
								 | 
							
								     * the base model.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    baseModelName: string | undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends multiple `insertOne`, `updateOne`, `updateMany`, `replaceOne`,
							 | 
						||
| 
								 | 
							
								     * `deleteOne`, and/or `deleteMany` operations to the MongoDB server in one
							 | 
						||
| 
								 | 
							
								     * command. This is faster than sending multiple independent operations (e.g.
							 | 
						||
| 
								 | 
							
								     * if you use `create()`) because with `bulkWrite()` there is only one round
							 | 
						||
| 
								 | 
							
								     * trip to MongoDB.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    bulkWrite(writes: Array<any>, options?: mongodb.CollectionBulkWriteOptions): Promise<mongodb.BulkWriteOpResultObject>;
							 | 
						||
| 
								 | 
							
								    bulkWrite(writes: Array<any>, options?: mongodb.CollectionBulkWriteOptions, cb?: Callback<mongodb.BulkWriteOpResultObject>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Collection the model uses. */
							 | 
						||
| 
								 | 
							
								    collection: Collection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `count` query: counts the number of documents that match `filter`. */
							 | 
						||
| 
								 | 
							
								    count(callback?: Callback<number>): QueryWithHelpers<number, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    count(filter: FilterQuery<T>, callback?: Callback<number>): QueryWithHelpers<number, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `countDocuments` query: counts the number of documents that match `filter`. */
							 | 
						||
| 
								 | 
							
								    countDocuments(callback?: Callback<number>): QueryWithHelpers<number, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    countDocuments(filter: FilterQuery<T>, callback?: Callback<number>): QueryWithHelpers<number, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a new document or documents */
							 | 
						||
| 
								 | 
							
								    create(docs: (T | DocumentDefinition<T> | AnyObject)[], options?: SaveOptions): Promise<EnforceDocument<T, TMethods>[]>;
							 | 
						||
| 
								 | 
							
								    create(docs: (T | DocumentDefinition<T> | AnyObject)[], callback: Callback<EnforceDocument<T, TMethods>[]>): void;
							 | 
						||
| 
								 | 
							
								    create(doc: T | DocumentDefinition<T> | AnyObject): Promise<EnforceDocument<T, TMethods>>;
							 | 
						||
| 
								 | 
							
								    create(doc: T | DocumentDefinition<T> | AnyObject, callback: Callback<EnforceDocument<T, TMethods>>): void;
							 | 
						||
| 
								 | 
							
								    create<DocContents = T | DocumentDefinition<T>>(docs: DocContents[], options?: SaveOptions): Promise<EnforceDocument<T, TMethods>[]>;
							 | 
						||
| 
								 | 
							
								    create<DocContents = T | DocumentDefinition<T>>(docs: DocContents[], callback: Callback<EnforceDocument<T, TMethods>[]>): void;
							 | 
						||
| 
								 | 
							
								    create<DocContents = T | DocumentDefinition<T>>(doc: DocContents): Promise<EnforceDocument<T, TMethods>>;
							 | 
						||
| 
								 | 
							
								    create<DocContents = T | DocumentDefinition<T>>(...docs: DocContents[]): Promise<EnforceDocument<T, TMethods>[]>;
							 | 
						||
| 
								 | 
							
								    create<DocContents = T | DocumentDefinition<T>>(doc: DocContents, callback: Callback<EnforceDocument<T, TMethods>>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Create the collection for this model. By default, if no indexes are specified,
							 | 
						||
| 
								 | 
							
								     * mongoose will not create the collection for the model until any documents are
							 | 
						||
| 
								 | 
							
								     * created. Use this method to create the collection explicitly.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    createCollection(options?: mongodb.CollectionCreateOptions): Promise<mongodb.Collection<T>>;
							 | 
						||
| 
								 | 
							
								    createCollection(options: mongodb.CollectionCreateOptions | null, callback: Callback<mongodb.Collection<T>>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Similar to `ensureIndexes()`, except for it uses the [`createIndex`](http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#createIndex)
							 | 
						||
| 
								 | 
							
								     * function.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    createIndexes(callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								    createIndexes(options?: any, callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Connection the model uses. */
							 | 
						||
| 
								 | 
							
								    db: Connection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Deletes all of the documents that match `conditions` from the collection.
							 | 
						||
| 
								 | 
							
								     * Behaves like `remove()`, but deletes all documents that match `conditions`
							 | 
						||
| 
								 | 
							
								     * regardless of the `single` option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    deleteMany(filter?: FilterQuery<T>, options?: QueryOptions, callback?: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    deleteMany(filter: FilterQuery<T>, callback: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    deleteMany(callback: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Deletes the first document that matches `conditions` from the collection.
							 | 
						||
| 
								 | 
							
								     * Behaves like `remove()`, but deletes at most one document regardless of the
							 | 
						||
| 
								 | 
							
								     * `single` option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    deleteOne(filter?: FilterQuery<T>, options?: QueryOptions, callback?: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    deleteOne(filter: FilterQuery<T>, callback: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    deleteOne(callback: CallbackWithoutResult): QueryWithHelpers<mongodb.DeleteWriteOpResultObject['result'] & { deletedCount?: number }, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sends `createIndex` commands to mongo for each index declared in the schema.
							 | 
						||
| 
								 | 
							
								     * The `createIndex` commands are sent in series.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ensureIndexes(callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								    ensureIndexes(options?: any, callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Event emitter that reports any errors that occurred. Useful for global error
							 | 
						||
| 
								 | 
							
								     * handling.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    events: NodeJS.EventEmitter;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Finds a single document by its _id field. `findById(id)` is almost*
							 | 
						||
| 
								 | 
							
								     * equivalent to `findOne({ _id: id })`. If you want to query by a document's
							 | 
						||
| 
								 | 
							
								     * `_id`, use `findById()` instead of `findOne()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    findById(id: any, projection?: any | null, options?: QueryOptions | null, callback?: Callback<EnforceDocument<T, TMethods> | null>): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Finds one document. */
							 | 
						||
| 
								 | 
							
								    findOne(filter?: FilterQuery<T>, projection?: any | null, options?: QueryOptions | null, callback?: Callback<EnforceDocument<T, TMethods> | null>): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Shortcut for creating a new Document from existing raw data, pre-saved in the DB.
							 | 
						||
| 
								 | 
							
								     * The document returned has no paths marked as modified initially.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    hydrate(obj: any): EnforceDocument<T, TMethods>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * This function is responsible for building [indexes](https://docs.mongodb.com/manual/indexes/),
							 | 
						||
| 
								 | 
							
								     * unless [`autoIndex`](http://mongoosejs.com/docs/guide.html#autoIndex) is turned off.
							 | 
						||
| 
								 | 
							
								     * Mongoose calls this function automatically when a model is created using
							 | 
						||
| 
								 | 
							
								     * [`mongoose.model()`](/docs/api.html#mongoose_Mongoose-model) or
							 | 
						||
| 
								 | 
							
								     * [`connection.model()`](/docs/api.html#connection_Connection-model), so you
							 | 
						||
| 
								 | 
							
								     * don't need to call it.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    init(callback?: CallbackWithoutResult): Promise<EnforceDocument<T, TMethods>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Inserts one or more new documents as a single `insertMany` call to the MongoDB server. */
							 | 
						||
| 
								 | 
							
								    insertMany(docs: Array<T | DocumentDefinition<T> | AnyObject>, options: InsertManyOptions & { rawResult: true }): Promise<InsertManyResult>;
							 | 
						||
| 
								 | 
							
								    insertMany(docs: Array<T | DocumentDefinition<T> | AnyObject>, options?: InsertManyOptions): Promise<Array<EnforceDocument<T, TMethods>>>;
							 | 
						||
| 
								 | 
							
								    insertMany(doc: T | DocumentDefinition<T> | AnyObject, options: InsertManyOptions & { rawResult: true }): Promise<InsertManyResult>;
							 | 
						||
| 
								 | 
							
								    insertMany(doc: T | DocumentDefinition<T> | AnyObject, options?: InsertManyOptions): Promise<EnforceDocument<T, TMethods>>;
							 | 
						||
| 
								 | 
							
								    insertMany(doc: T | DocumentDefinition<T> | AnyObject, options?: InsertManyOptions, callback?: Callback<EnforceDocument<T, TMethods> | InsertManyResult>): void;
							 | 
						||
| 
								 | 
							
								    insertMany(docs: Array<T | DocumentDefinition<T> | AnyObject>, options?: InsertManyOptions, callback?: Callback<Array<EnforceDocument<T, TMethods>> | InsertManyResult>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Lists the indexes currently defined in MongoDB. This may or may not be
							 | 
						||
| 
								 | 
							
								     * the same as the indexes defined in your schema depending on whether you
							 | 
						||
| 
								 | 
							
								     * use the [`autoIndex` option](/docs/guide.html#autoIndex) and if you
							 | 
						||
| 
								 | 
							
								     * build indexes manually.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    listIndexes(callback: Callback<Array<any>>): void;
							 | 
						||
| 
								 | 
							
								    listIndexes(): Promise<Array<any>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The name of the model */
							 | 
						||
| 
								 | 
							
								    modelName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Populates document references. */
							 | 
						||
| 
								 | 
							
								    populate(docs: Array<any>, options: PopulateOptions | Array<PopulateOptions> | string,
							 | 
						||
| 
								 | 
							
								      callback?: Callback<(EnforceDocument<T, TMethods>)[]>): Promise<Array<EnforceDocument<T, TMethods>>>;
							 | 
						||
| 
								 | 
							
								    populate(doc: any, options: PopulateOptions | Array<PopulateOptions> | string,
							 | 
						||
| 
								 | 
							
								      callback?: Callback<EnforceDocument<T, TMethods>>): Promise<EnforceDocument<T, TMethods>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Makes the indexes in MongoDB match the indexes defined in this model's
							 | 
						||
| 
								 | 
							
								     * schema. This function will drop any indexes that are not defined in
							 | 
						||
| 
								 | 
							
								     * the model's schema except the `_id` index, and build any indexes that
							 | 
						||
| 
								 | 
							
								     * are in your schema but not in MongoDB.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    syncIndexes(options?: Record<string, unknown>): Promise<Array<string>>;
							 | 
						||
| 
								 | 
							
								    syncIndexes(options: Record<string, unknown> | null, callback: Callback<Array<string>>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Does a dry-run of Model.syncIndexes(), meaning that
							 | 
						||
| 
								 | 
							
								     * the result of this function would be the result of
							 | 
						||
| 
								 | 
							
								     * Model.syncIndexes().
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    diffIndexes(options?: Record<string, unknown>): Promise<IndexesDiff>
							 | 
						||
| 
								 | 
							
								    diffIndexes(options: Record<string, unknown> | null, callback: (err: CallbackError, diff: IndexesDiff) => void): void
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Starts a [MongoDB session](https://docs.mongodb.com/manual/release-notes/3.6/#client-sessions)
							 | 
						||
| 
								 | 
							
								     * for benefits like causal consistency, [retryable writes](https://docs.mongodb.com/manual/core/retryable-writes/),
							 | 
						||
| 
								 | 
							
								     * and [transactions](http://thecodebarbarian.com/a-node-js-perspective-on-mongodb-4-transactions.html).
							 | 
						||
| 
								 | 
							
								     * */
							 | 
						||
| 
								 | 
							
								    startSession(options?: mongodb.SessionOptions, cb?: Callback<mongodb.ClientSession>): Promise<mongodb.ClientSession>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Casts and validates the given object against this model's schema, passing the given `context` to custom validators. */
							 | 
						||
| 
								 | 
							
								    validate(callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								    validate(optional: any, callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								    validate(optional: any, pathsToValidate: string[], callback?: CallbackWithoutResult): Promise<void>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Watches the underlying collection for changes using [MongoDB change streams](https://docs.mongodb.com/manual/changeStreams/). */
							 | 
						||
| 
								 | 
							
								    watch(pipeline?: Array<Record<string, unknown>>, options?: mongodb.ChangeStreamOptions): mongodb.ChangeStream;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a `$where` clause to this query */
							 | 
						||
| 
								 | 
							
								    $where(argument: string | Function): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Registered discriminators for this model. */
							 | 
						||
| 
								 | 
							
								    discriminators: { [name: string]: Model<any> } | undefined;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Translate any aliases fields/conditions so the final query or document object is pure */
							 | 
						||
| 
								 | 
							
								    translateAliases(raw: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `distinct` query: returns the distinct values of the given `field` that match `filter`. */
							 | 
						||
| 
								 | 
							
								    distinct(field: string, filter?: FilterQuery<T>, callback?: Callback<number>): QueryWithHelpers<Array<any>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `estimatedDocumentCount` query: counts the number of documents in the collection. */
							 | 
						||
| 
								 | 
							
								    estimatedDocumentCount(options?: QueryOptions, callback?: Callback<number>): QueryWithHelpers<number, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if at least one document exists in the database that matches
							 | 
						||
| 
								 | 
							
								     * the given `filter`, and false otherwise.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    exists(filter: FilterQuery<T>): Promise<boolean>;
							 | 
						||
| 
								 | 
							
								    exists(filter: FilterQuery<T>, callback: Callback<boolean>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `find` query: gets a list of documents that match `filter`. */
							 | 
						||
| 
								 | 
							
								    find(callback?: Callback<EnforceDocument<T, TMethods>[]>): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    find(filter: FilterQuery<T>, callback?: Callback<T[]>): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    find(filter: FilterQuery<T>, projection?: any | null, options?: QueryOptions | null, callback?: Callback<EnforceDocument<T, TMethods>[]>): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findByIdAndDelete` query, filtering by the given `_id`. */
							 | 
						||
| 
								 | 
							
								    findByIdAndDelete(id?: mongodb.ObjectId | any, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findByIdAndRemove` query, filtering by the given `_id`. */
							 | 
						||
| 
								 | 
							
								    findByIdAndRemove(id?: mongodb.ObjectId | any, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndUpdate` query, filtering by the given `_id`. */
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id: mongodb.ObjectId | any, update: UpdateQuery<T> | UpdateWithAggregationPipeline, options: QueryOptions & { rawResult: true }, callback?: (err: CallbackError, doc: mongodb.FindAndModifyWriteOpResultObject<EnforceDocument<T, TMethods>>, res: any) => void): QueryWithHelpers<mongodb.FindAndModifyWriteOpResultObject<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id: mongodb.ObjectId | any, update: UpdateQuery<T> | UpdateWithAggregationPipeline, options: QueryOptions & { upsert: true } & ReturnsNewDoc, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods>, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id: mongodb.ObjectId | any, update: UpdateQuery<T> | UpdateWithAggregationPipeline, callback?: (err: CallbackError, doc: T | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id?: mongodb.ObjectId | any, update?: UpdateQuery<T> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndDelete` query: atomically finds the given document, deletes it, and returns the document as it was before deletion. */
							 | 
						||
| 
								 | 
							
								    findOneAndDelete(filter?: FilterQuery<T>, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndRemove` query: atomically finds the given document and deletes it. */
							 | 
						||
| 
								 | 
							
								    findOneAndRemove(filter?: FilterQuery<T>, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndReplace` query: atomically finds the given document and replaces it with `replacement`. */
							 | 
						||
| 
								 | 
							
								    findOneAndReplace(filter: FilterQuery<T>, replacement: DocumentDefinition<T> | AnyObject, options: QueryOptions & { upsert: true } & ReturnsNewDoc, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods>, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findOneAndReplace(filter?: FilterQuery<T>, replacement?: DocumentDefinition<T> | AnyObject, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndUpdate` query: atomically find the first document that matches `filter` and apply `update`. */
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter: FilterQuery<T>, update: UpdateQuery<T> | UpdateWithAggregationPipeline, options: QueryOptions & { rawResult: true }, callback?: (err: CallbackError, doc: mongodb.FindAndModifyWriteOpResultObject<EnforceDocument<T, TMethods>>, res: any) => void): QueryWithHelpers<mongodb.FindAndModifyWriteOpResultObject<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter: FilterQuery<T>, update: UpdateQuery<T> | UpdateWithAggregationPipeline, options: QueryOptions & { upsert: true } & ReturnsNewDoc, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods>, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter?: FilterQuery<T>, update?: UpdateQuery<T> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: (err: CallbackError, doc: EnforceDocument<T, TMethods> | null, res: any) => void): QueryWithHelpers<EnforceDocument<T, TMethods> | null, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    geoSearch(filter?: FilterQuery<T>, options?: GeoSearchOptions, callback?: Callback<Array<EnforceDocument<T, TMethods>>>): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Executes a mapReduce command. */
							 | 
						||
| 
								 | 
							
								    mapReduce<Key, Value>(
							 | 
						||
| 
								 | 
							
								      o: MapReduceOptions<T, Key, Value>,
							 | 
						||
| 
								 | 
							
								      callback?: Callback
							 | 
						||
| 
								 | 
							
								    ): Promise<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    remove(filter?: any, callback?: CallbackWithoutResult): QueryWithHelpers<any, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `replaceOne` query: finds the first document that matches `filter` and replaces it with `replacement`. */
							 | 
						||
| 
								 | 
							
								    replaceOne(filter?: FilterQuery<T>, replacement?: DocumentDefinition<T>, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<any, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    replaceOne(filter?: FilterQuery<T>, replacement?: Object, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<any, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Schema the model uses. */
							 | 
						||
| 
								 | 
							
								    schema: Schema;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @deprecated use `updateOne` or `updateMany` instead.
							 | 
						||
| 
								 | 
							
								     * Creates a `update` query: updates one or many documents that match `filter` with `update`, based on the `multi` option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    update(filter?: FilterQuery<T>, update?: UpdateQuery<T> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<UpdateWriteOpResult, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `updateMany` query: updates all documents that match `filter` with `update`. */
							 | 
						||
| 
								 | 
							
								    updateMany(filter?: FilterQuery<T>, update?: UpdateQuery<T> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<UpdateWriteOpResult, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `updateOne` query: updates the first document that matches `filter` with `update`. */
							 | 
						||
| 
								 | 
							
								    updateOne(filter?: FilterQuery<T>, update?: UpdateQuery<T> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<UpdateWriteOpResult, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a Query, applies the passed conditions, and returns the Query. */
							 | 
						||
| 
								 | 
							
								    where(path: string, val?: any): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    where(obj: object): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								    where(): QueryWithHelpers<Array<EnforceDocument<T, TMethods>>, EnforceDocument<T, TMethods>, TQueryHelpers, T>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type _UpdateWriteOpResult = mongodb.UpdateWriteOpResult['result'];
							 | 
						||
| 
								 | 
							
								  interface UpdateWriteOpResult extends _UpdateWriteOpResult {
							 | 
						||
| 
								 | 
							
								    upserted?: Array<{index: number, _id: any}>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface QueryOptions {
							 | 
						||
| 
								 | 
							
								    arrayFilters?: { [key: string]: any }[];
							 | 
						||
| 
								 | 
							
								    batchSize?: number;
							 | 
						||
| 
								 | 
							
								    collation?: mongodb.CollationDocument;
							 | 
						||
| 
								 | 
							
								    comment?: any;
							 | 
						||
| 
								 | 
							
								    context?: string;
							 | 
						||
| 
								 | 
							
								    explain?: any;
							 | 
						||
| 
								 | 
							
								    fields?: any | string;
							 | 
						||
| 
								 | 
							
								    hint?: any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If truthy, mongoose will return the document as a plain JavaScript object rather than a mongoose document.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    lean?: boolean | any;
							 | 
						||
| 
								 | 
							
								    limit?: number;
							 | 
						||
| 
								 | 
							
								    maxTimeMS?: number;
							 | 
						||
| 
								 | 
							
								    maxscan?: number;
							 | 
						||
| 
								 | 
							
								    multi?: boolean;
							 | 
						||
| 
								 | 
							
								    multipleCastError?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, `findOneAndUpdate()` returns the document as it was **before**
							 | 
						||
| 
								 | 
							
								     * `update` was applied. If you set `new: true`, `findOneAndUpdate()` will
							 | 
						||
| 
								 | 
							
								     * instead give you the object after `update` was applied.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    new?: boolean;
							 | 
						||
| 
								 | 
							
								    omitUndefined?: boolean;
							 | 
						||
| 
								 | 
							
								    overwrite?: boolean;
							 | 
						||
| 
								 | 
							
								    overwriteDiscriminatorKey?: boolean;
							 | 
						||
| 
								 | 
							
								    populate?: string | string[] | PopulateOptions | PopulateOptions[];
							 | 
						||
| 
								 | 
							
								    projection?: any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * if true, returns the raw result from the MongoDB driver
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    rawResult?: boolean;
							 | 
						||
| 
								 | 
							
								    readPreference?: mongodb.ReadPreferenceMode;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An alias for the `new` option. `returnOriginal: false` is equivalent to `new: true`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    returnOriginal?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Another alias for the `new` option. `returnOriginal` is deprecated so this should be used.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    returnDocument?: string;
							 | 
						||
| 
								 | 
							
								    runValidators?: boolean;
							 | 
						||
| 
								 | 
							
								    sanitizeProjection?: boolean;
							 | 
						||
| 
								 | 
							
								    /** The session associated with this query. */
							 | 
						||
| 
								 | 
							
								    session?: mongodb.ClientSession;
							 | 
						||
| 
								 | 
							
								    setDefaultsOnInsert?: boolean;
							 | 
						||
| 
								 | 
							
								    skip?: number;
							 | 
						||
| 
								 | 
							
								    snapshot?: any;
							 | 
						||
| 
								 | 
							
								    sort?: any;
							 | 
						||
| 
								 | 
							
								    /** overwrites the schema's strict mode option */
							 | 
						||
| 
								 | 
							
								    strict?: boolean | string;
							 | 
						||
| 
								 | 
							
								    tailable?: number;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If set to `false` and schema-level timestamps are enabled,
							 | 
						||
| 
								 | 
							
								     * skip timestamps for this update. Note that this allows you to overwrite
							 | 
						||
| 
								 | 
							
								     * timestamps. Does nothing if schema-level timestamps are not set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    timestamps?: boolean;
							 | 
						||
| 
								 | 
							
								    upsert?: boolean;
							 | 
						||
| 
								 | 
							
								    useFindAndModify?: boolean;
							 | 
						||
| 
								 | 
							
								    writeConcern?: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type MongooseQueryOptions = Pick<QueryOptions, 'populate' | 'lean' | 'omitUndefined' | 'strict' | 'useFindAndModify' | 'sanitizeProjection'>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface SaveOptions {
							 | 
						||
| 
								 | 
							
								    checkKeys?: boolean;
							 | 
						||
| 
								 | 
							
								    j?: boolean;
							 | 
						||
| 
								 | 
							
								    safe?: boolean | WriteConcern;
							 | 
						||
| 
								 | 
							
								    session?: ClientSession | null;
							 | 
						||
| 
								 | 
							
								    timestamps?: boolean;
							 | 
						||
| 
								 | 
							
								    validateBeforeSave?: boolean;
							 | 
						||
| 
								 | 
							
								    validateModifiedOnly?: boolean;
							 | 
						||
| 
								 | 
							
								    w?: number | string;
							 | 
						||
| 
								 | 
							
								    wtimeout?: number;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface WriteConcern {
							 | 
						||
| 
								 | 
							
								    j?: boolean;
							 | 
						||
| 
								 | 
							
								    w?: number | 'majority' | TagSet;
							 | 
						||
| 
								 | 
							
								    wtimeout?: number;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface TagSet {
							 | 
						||
| 
								 | 
							
								    [k: string]: string;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface InsertManyOptions {
							 | 
						||
| 
								 | 
							
								    limit?: number;
							 | 
						||
| 
								 | 
							
								    rawResult?: boolean;
							 | 
						||
| 
								 | 
							
								    ordered?: boolean;
							 | 
						||
| 
								 | 
							
								    lean?: boolean;
							 | 
						||
| 
								 | 
							
								    session?: mongodb.ClientSession;
							 | 
						||
| 
								 | 
							
								    populate?: string | string[] | PopulateOptions | PopulateOptions[];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface InsertManyResult extends mongodb.InsertWriteOpResult<any> {
							 | 
						||
| 
								 | 
							
								    mongoose?: { validationErrors?: Array<Error.CastError | Error.ValidatorError> }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface MapReduceOptions<T, Key, Val> {
							 | 
						||
| 
								 | 
							
								    map: Function | string;
							 | 
						||
| 
								 | 
							
								    reduce: (key: Key, vals: T[]) => Val;
							 | 
						||
| 
								 | 
							
								    /** query filter object. */
							 | 
						||
| 
								 | 
							
								    query?: any;
							 | 
						||
| 
								 | 
							
								    /** sort input objects using this key */
							 | 
						||
| 
								 | 
							
								    sort?: any;
							 | 
						||
| 
								 | 
							
								    /** max number of documents */
							 | 
						||
| 
								 | 
							
								    limit?: number;
							 | 
						||
| 
								 | 
							
								    /** keep temporary data default: false */
							 | 
						||
| 
								 | 
							
								    keeptemp?: boolean;
							 | 
						||
| 
								 | 
							
								    /** finalize function */
							 | 
						||
| 
								 | 
							
								    finalize?: (key: Key, val: Val) => Val;
							 | 
						||
| 
								 | 
							
								    /** scope variables exposed to map/reduce/finalize during execution */
							 | 
						||
| 
								 | 
							
								    scope?: any;
							 | 
						||
| 
								 | 
							
								    /** it is possible to make the execution stay in JS. Provided in MongoDB > 2.0.X default: false */
							 | 
						||
| 
								 | 
							
								    jsMode?: boolean;
							 | 
						||
| 
								 | 
							
								    /** provide statistics on job execution time. default: false */
							 | 
						||
| 
								 | 
							
								    verbose?: boolean;
							 | 
						||
| 
								 | 
							
								    readPreference?: string;
							 | 
						||
| 
								 | 
							
								    /** sets the output target for the map reduce job. default: {inline: 1} */
							 | 
						||
| 
								 | 
							
								    out?: {
							 | 
						||
| 
								 | 
							
								      /** the results are returned in an array */
							 | 
						||
| 
								 | 
							
								      inline?: number;
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * {replace: 'collectionName'} add the results to collectionName: the
							 | 
						||
| 
								 | 
							
								       * results replace the collection
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      replace?: string;
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * {reduce: 'collectionName'} add the results to collectionName: if
							 | 
						||
| 
								 | 
							
								       * dups are detected, uses the reducer / finalize functions
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      reduce?: string;
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * {merge: 'collectionName'} add the results to collectionName: if
							 | 
						||
| 
								 | 
							
								       * dups exist the new docs overwrite the old
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      merge?: string;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface GeoSearchOptions {
							 | 
						||
| 
								 | 
							
								    /** x,y point to search for */
							 | 
						||
| 
								 | 
							
								    near: number[];
							 | 
						||
| 
								 | 
							
								    /** the maximum distance from the point near that a result can be */
							 | 
						||
| 
								 | 
							
								    maxDistance: number;
							 | 
						||
| 
								 | 
							
								    /** The maximum number of results to return */
							 | 
						||
| 
								 | 
							
								    limit?: number;
							 | 
						||
| 
								 | 
							
								    /** return the raw object instead of the Mongoose Model */
							 | 
						||
| 
								 | 
							
								    lean?: boolean;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface PopulateOptions {
							 | 
						||
| 
								 | 
							
								    /** space delimited path(s) to populate */
							 | 
						||
| 
								 | 
							
								    path: string;
							 | 
						||
| 
								 | 
							
								    /** fields to select */
							 | 
						||
| 
								 | 
							
								    select?: any;
							 | 
						||
| 
								 | 
							
								    /** query conditions to match */
							 | 
						||
| 
								 | 
							
								    match?: any;
							 | 
						||
| 
								 | 
							
								    /** optional model to use for population */
							 | 
						||
| 
								 | 
							
								    model?: string | Model<any>;
							 | 
						||
| 
								 | 
							
								    /** optional query options like sort, limit, etc */
							 | 
						||
| 
								 | 
							
								    options?: any;
							 | 
						||
| 
								 | 
							
								    /** deep populate */
							 | 
						||
| 
								 | 
							
								    populate?: PopulateOptions | Array<PopulateOptions>;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If true Mongoose will always set `path` to an array, if false Mongoose will
							 | 
						||
| 
								 | 
							
								     * always set `path` to a document. Inferred from schema by default.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    justOne?: boolean;
							 | 
						||
| 
								 | 
							
								    /** transform function to call on every populated doc */
							 | 
						||
| 
								 | 
							
								    transform?: (doc: any, id: any) => any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ToObjectOptions {
							 | 
						||
| 
								 | 
							
								    /** apply all getters (path and virtual getters) */
							 | 
						||
| 
								 | 
							
								    getters?: boolean;
							 | 
						||
| 
								 | 
							
								    /** apply virtual getters (can override getters option) */
							 | 
						||
| 
								 | 
							
								    virtuals?: boolean | string[];
							 | 
						||
| 
								 | 
							
								    /** 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;
							 | 
						||
| 
								 | 
							
								    /** remove empty objects (defaults to true) */
							 | 
						||
| 
								 | 
							
								    minimize?: boolean;
							 | 
						||
| 
								 | 
							
								    /** if set, mongoose will call this function to allow you to transform the returned object */
							 | 
						||
| 
								 | 
							
								    transform?: (doc: any, ret: any, options: any) => any;
							 | 
						||
| 
								 | 
							
								    /** if true, replace any conventionally populated paths with the original id in the output. Has no affect on virtual populated paths. */
							 | 
						||
| 
								 | 
							
								    depopulate?: boolean;
							 | 
						||
| 
								 | 
							
								    /** if false, exclude the version key (`__v` by default) from the output */
							 | 
						||
| 
								 | 
							
								    versionKey?: boolean;
							 | 
						||
| 
								 | 
							
								    /** if true, convert Maps to POJOs. Useful if you want to `JSON.stringify()` the result of `toObject()`. */
							 | 
						||
| 
								 | 
							
								    flattenMaps?: boolean;
							 | 
						||
| 
								 | 
							
								    /** 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;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type MongooseDocumentMiddleware = 'validate' | 'save' | 'remove' | 'updateOne' | 'deleteOne' | 'init';
							 | 
						||
| 
								 | 
							
								  type MongooseQueryMiddleware = 'count' | 'deleteMany' | 'deleteOne' | 'distinct' | 'find' | 'findOne' | 'findOneAndDelete' | 'findOneAndRemove' | 'findOneAndUpdate' | 'remove' | 'update' | 'updateOne' | 'updateMany';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type SchemaPreOptions = { document?: boolean, query?: boolean };
							 | 
						||
| 
								 | 
							
								  type SchemaPostOptions = { document?: boolean, query?: boolean };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type ExtractMethods<M> = M extends Model<any, any, infer TMethods> ? TMethods : {};
							 | 
						||
| 
								 | 
							
								  type ExtractQueryHelpers<M> = M extends Model<any, infer TQueryHelpers> ? TQueryHelpers : {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type IndexDirection = 1 | -1 | '2d' | '2dsphere' | 'geoHaystack' | 'hashed' | 'text';
							 | 
						||
| 
								 | 
							
								  type IndexDefinition = Record<string, IndexDirection>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type PreMiddlewareFunction<T> = (this: T, next: (err?: CallbackError) => void) => void | Promise<void>;
							 | 
						||
| 
								 | 
							
								  type PreSaveMiddlewareFunction<T> = (this: T, next: (err?: CallbackError) => void, opts: SaveOptions) => void | Promise<void>;
							 | 
						||
| 
								 | 
							
								  type PostMiddlewareFunction<ThisType, ResType = any> = (this: ThisType, res: ResType, next: (err?: CallbackError) => void) => void | Promise<void>;
							 | 
						||
| 
								 | 
							
								  type ErrorHandlingMiddlewareFunction<ThisType, ResType = any> = (this: ThisType, err: NativeError, res: ResType, next: (err?: CallbackError) => void) => void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Schema<DocType = Document, M = Model<DocType, any, any>, SchemaDefinitionType = undefined, TInstanceMethods = {}> extends events.EventEmitter {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Create a new schema
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    constructor(definition?: SchemaDefinition<LeanDocument<SchemaDefinitionType>>, options?: SchemaOptions);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds key path / schema type pairs to this schema. */
							 | 
						||
| 
								 | 
							
								    add(obj: SchemaDefinition<LeanDocument<SchemaDefinitionType>> | Schema, prefix?: 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 }[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns a copy of this schema */
							 | 
						||
| 
								 | 
							
								    clone(): Schema;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** 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?: IndexOptions): 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>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets a schema option. */
							 | 
						||
| 
								 | 
							
								    get<K extends keyof SchemaOptions>(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: EnforceDocument<DocType, TInstanceMethods>, ...args: any[]) => any, opts?: any): this;
							 | 
						||
| 
								 | 
							
								    method(obj: { [name: string]: (this: EnforceDocument<DocType, TInstanceMethods>, ...args: any[]) => any }): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Object of currently defined methods on this schema. */
							 | 
						||
| 
								 | 
							
								    methods: { [name: string]: (this: EnforceDocument<DocType, TInstanceMethods>, ...args: any[]) => any };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The original object passed to the schema constructor */
							 | 
						||
| 
								 | 
							
								    obj: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets/sets schema paths. */
							 | 
						||
| 
								 | 
							
								    path<ResultType extends SchemaType = SchemaType>(path: string): ResultType;
							 | 
						||
| 
								 | 
							
								    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(fn: (schema: Schema<DocType, Model<DocType>, SchemaDefinitionType>, opts?: any) => void, opts?: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a post hook for the model. */
							 | 
						||
| 
								 | 
							
								    post<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, fn: PostMiddlewareFunction<T, Array<any>>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction<T, Array<any>>): this;
							 | 
						||
| 
								 | 
							
								    post<T = M>(method: 'insertMany' | RegExp, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T = M>(method: 'insertMany' | RegExp, options: SchemaPostOptions, fn: PostMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    post<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, fn: ErrorHandlingMiddlewareFunction<T, Array<any>>): this;
							 | 
						||
| 
								 | 
							
								    post<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction<T, Array<any>>): this;
							 | 
						||
| 
								 | 
							
								    post<T = M>(method: 'insertMany' | RegExp, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    post<T = M>(method: 'insertMany' | RegExp, options: SchemaPostOptions, fn: ErrorHandlingMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a pre hook for the model. */
							 | 
						||
| 
								 | 
							
								    pre<T = EnforceDocument<DocType, TInstanceMethods>>(method: 'save', fn: PreSaveMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T = EnforceDocument<DocType, TInstanceMethods>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, options: SchemaPreOptions, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T extends Query<any, any> = Query<any, any>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | string | RegExp, options: SchemaPreOptions, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T extends Aggregate<any> = Aggregate<any>>(method: 'aggregate' | RegExp, options: SchemaPreOptions, fn: PreMiddlewareFunction<T>): this;
							 | 
						||
| 
								 | 
							
								    pre<T = M>(method: 'insertMany' | RegExp, fn: (this: T, next: (err?: CallbackError) => void, docs: any | Array<any>) => void | Promise<void>): this;
							 | 
						||
| 
								 | 
							
								    pre<T = M>(method: 'insertMany' | RegExp, options: SchemaPreOptions, fn: (this: T, next: (err?: CallbackError) => void, docs: any | Array<any>) => void | Promise<void>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Object of currently defined query helpers on this schema. */
							 | 
						||
| 
								 | 
							
								    query: { [name: string]: (this: QueryWithHelpers<any, DocType, ExtractQueryHelpers<M>>, ...args: any[]) => any };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a method call to the queue. */
							 | 
						||
| 
								 | 
							
								    queue(name: string, args: any[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Removes the given `path` (or [`paths`]). */
							 | 
						||
| 
								 | 
							
								    remove(paths: string | Array<string>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns an Array of path strings that are required by this schema. */
							 | 
						||
| 
								 | 
							
								    requiredPaths(invalidate?: boolean): string[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets a schema option. */
							 | 
						||
| 
								 | 
							
								    set<K extends keyof SchemaOptions>(key: K, value: SchemaOptions[K], _tags?: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds static "class" methods to Models compiled from this schema. */
							 | 
						||
| 
								 | 
							
								    static(name: string, fn: (this: M, ...args: any[]) => any): this;
							 | 
						||
| 
								 | 
							
								    static(obj: { [name: string]: (this: M, ...args: any[]) => any }): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Object of currently defined statics on this schema. */
							 | 
						||
| 
								 | 
							
								    statics: { [name: string]: (this: M, ...args: any[]) => any };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a virtual type with the given name. */
							 | 
						||
| 
								 | 
							
								    virtual(name: string, options?: VirtualTypeOptions): VirtualType;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Object of currently defined virtuals on this schema */
							 | 
						||
| 
								 | 
							
								    virtuals: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the virtual type with the given `name`. */
							 | 
						||
| 
								 | 
							
								    virtualpath(name: string): VirtualType | null;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type SchemaDefinitionWithBuiltInClass<T extends number | string | boolean | NativeDate | Function> = T extends number
							 | 
						||
| 
								 | 
							
								    ? (typeof Number | 'number' | 'Number' | typeof Schema.Types.Number)
							 | 
						||
| 
								 | 
							
								    : T extends string
							 | 
						||
| 
								 | 
							
								    ? (typeof String | 'string' | 'String' | typeof Schema.Types.String)
							 | 
						||
| 
								 | 
							
								    : T extends boolean
							 | 
						||
| 
								 | 
							
								    ? (typeof Boolean | 'boolean' | 'Boolean' | typeof Schema.Types.Boolean)
							 | 
						||
| 
								 | 
							
								    : T extends NativeDate
							 | 
						||
| 
								 | 
							
								    ? (typeof NativeDate | 'date' | 'Date' | typeof Schema.Types.Date)
							 | 
						||
| 
								 | 
							
								    : (Function | string);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type SchemaDefinitionProperty<T = undefined> = T extends string | number | boolean | NativeDate | Function
							 | 
						||
| 
								 | 
							
								    ? (SchemaDefinitionWithBuiltInClass<T> | SchemaTypeOptions<T>) :
							 | 
						||
| 
								 | 
							
								    SchemaTypeOptions<T extends undefined ? any : T> |
							 | 
						||
| 
								 | 
							
								    typeof SchemaType |
							 | 
						||
| 
								 | 
							
								    Schema<any, any, any, any> |
							 | 
						||
| 
								 | 
							
								    Schema<any, any, any, any>[] |
							 | 
						||
| 
								 | 
							
								    ReadonlyArray<Schema<any, any, any, any>> |
							 | 
						||
| 
								 | 
							
								    SchemaTypeOptions<T extends undefined ? any : T>[] |
							 | 
						||
| 
								 | 
							
								    ReadonlyArray<SchemaTypeOptions<T extends undefined ? any : T>> |
							 | 
						||
| 
								 | 
							
								    Function[] |
							 | 
						||
| 
								 | 
							
								    SchemaDefinition<T> |
							 | 
						||
| 
								 | 
							
								    SchemaDefinition<T>[] |
							 | 
						||
| 
								 | 
							
								    ReadonlyArray<SchemaDefinition<T>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type SchemaDefinition<T = undefined> = T extends undefined
							 | 
						||
| 
								 | 
							
								    ? { [path: string]: SchemaDefinitionProperty; }
							 | 
						||
| 
								 | 
							
								    : { [path in keyof T]?: SchemaDefinitionProperty<T[path]>; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface SchemaOptions {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, Mongoose's init() function creates all the indexes defined in your model's schema by
							 | 
						||
| 
								 | 
							
								     * calling Model.createIndexes() after you successfully connect to MongoDB. If you want to disable
							 | 
						||
| 
								 | 
							
								     * automatic index builds, you can set autoIndex to false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    autoIndex?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If set to `true`, Mongoose will call Model.createCollection() to create the underlying collection
							 | 
						||
| 
								 | 
							
								     * in MongoDB if autoCreate is set to true. Calling createCollection() sets the collection's default
							 | 
						||
| 
								 | 
							
								     * collation based on the collation option and establishes the collection as a capped collection if
							 | 
						||
| 
								 | 
							
								     * you set the capped schema option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    autoCreate?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, mongoose buffers commands when the connection goes down until the driver manages to reconnect.
							 | 
						||
| 
								 | 
							
								     * To disable buffering, set bufferCommands to false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    bufferCommands?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If bufferCommands is on, this option sets the maximum amount of time Mongoose buffering will wait before
							 | 
						||
| 
								 | 
							
								     * throwing an error. If not specified, Mongoose will use 10000 (10 seconds).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    bufferTimeoutMS?: number;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mongoose supports MongoDBs capped collections. To specify the underlying MongoDB collection be capped, set
							 | 
						||
| 
								 | 
							
								     * the capped option to the maximum size of the collection in bytes.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    capped?: boolean | number | { size?: number; max?: number; autoIndexId?: boolean; };
							 | 
						||
| 
								 | 
							
								    /** Sets a default collation for every query and aggregation. */
							 | 
						||
| 
								 | 
							
								    collation?: mongodb.CollationDocument;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mongoose by default produces a collection name by passing the model name to the utils.toCollectionName
							 | 
						||
| 
								 | 
							
								     * method. This method pluralizes the name. Set this option if you need a different name for your collection.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    collection?: string;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * When you define a [discriminator](/docs/discriminators.html), Mongoose adds a path to your
							 | 
						||
| 
								 | 
							
								     * schema that stores which discriminator a document is an instance of. By default, Mongoose
							 | 
						||
| 
								 | 
							
								     * adds an `__t` path, but you can set `discriminatorKey` to overwrite this default.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    discriminatorKey?: string;
							 | 
						||
| 
								 | 
							
								    /** defaults to false. */
							 | 
						||
| 
								 | 
							
								    emitIndexErrors?: boolean;
							 | 
						||
| 
								 | 
							
								    excludeIndexes?: any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mongoose assigns each of your schemas an id virtual getter by default which returns the document's _id field
							 | 
						||
| 
								 | 
							
								     * cast to a string, or in the case of ObjectIds, its hexString.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    id?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mongoose assigns each of your schemas an _id field by default if one is not passed into the Schema
							 | 
						||
| 
								 | 
							
								     * constructor. The type assigned is an ObjectId to coincide with MongoDB's default behavior. If you
							 | 
						||
| 
								 | 
							
								     * don't want an _id added to your schema at all, you may disable it using this option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    _id?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Mongoose will, by default, "minimize" schemas by removing empty objects. This behavior can be
							 | 
						||
| 
								 | 
							
								     * overridden by setting minimize option to false. It will then store empty objects.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    minimize?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Optimistic concurrency is a strategy to ensure the document you're updating didn't change between when you
							 | 
						||
| 
								 | 
							
								     * loaded it using find() or findOne(), and when you update it using save(). Set to `true` to enable
							 | 
						||
| 
								 | 
							
								     * optimistic concurrency.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    optimisticConcurrency?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Allows setting query#read options at the schema level, providing us a way to apply default ReadPreferences
							 | 
						||
| 
								 | 
							
								     * to all queries derived from a model.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    read?: string;
							 | 
						||
| 
								 | 
							
								    /** Allows setting write concern at the schema level. */
							 | 
						||
| 
								 | 
							
								    writeConcern?: WriteConcern;
							 | 
						||
| 
								 | 
							
								    /** defaults to true. */
							 | 
						||
| 
								 | 
							
								    safe?: boolean | { w?: number | string; wtimeout?: number; j?: boolean };
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The shardKey option is used when we have a sharded MongoDB architecture. Each sharded collection is
							 | 
						||
| 
								 | 
							
								     * given a shard key which must be present in all insert/update operations. We just need to set this
							 | 
						||
| 
								 | 
							
								     * schema option to the same shard key and we'll be all set.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    shardKey?: Record<string, unknown>;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * For backwards compatibility, the strict option does not apply to the filter parameter for queries.
							 | 
						||
| 
								 | 
							
								     * Mongoose has a separate strictQuery option to toggle strict mode for the filter parameter to queries.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    strictQuery?: boolean | 'throw';
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The strict option, (enabled by default), ensures that values passed to our model constructor that were not
							 | 
						||
| 
								 | 
							
								     * specified in our schema do not get saved to the db.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    strict?: boolean | 'throw';
							 | 
						||
| 
								 | 
							
								    /** Exactly the same as the toObject option but only applies when the document's toJSON method is called. */
							 | 
						||
| 
								 | 
							
								    toJSON?: ToObjectOptions;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Documents have a toObject method which converts the mongoose document into a plain JavaScript object.
							 | 
						||
| 
								 | 
							
								     * This method accepts a few options. Instead of applying these options on a per-document basis, we may
							 | 
						||
| 
								 | 
							
								     * declare the options at the schema level and have them applied to all of the schema's documents by
							 | 
						||
| 
								 | 
							
								     * default.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    toObject?: ToObjectOptions;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, if you have an object with key 'type' in your schema, mongoose will interpret it as a
							 | 
						||
| 
								 | 
							
								     * type declaration. However, for applications like geoJSON, the 'type' property is important. If you want to
							 | 
						||
| 
								 | 
							
								     * control which key mongoose uses to find type declarations, set the 'typeKey' schema option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    typeKey?: string;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Write operations like update(), updateOne(), updateMany(), and findOneAndUpdate() only check the top-level
							 | 
						||
| 
								 | 
							
								     * schema's strict mode setting. Set to `true` to use the child schema's `strict` mode setting.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    useNestedStrict?: boolean;
							 | 
						||
| 
								 | 
							
								    /** defaults to false */
							 | 
						||
| 
								 | 
							
								    usePushEach?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, documents are automatically validated before they are saved to the database. This is to
							 | 
						||
| 
								 | 
							
								     * prevent saving an invalid document. If you want to handle validation manually, and be able to save
							 | 
						||
| 
								 | 
							
								     * objects which don't pass validation, you can set validateBeforeSave to false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    validateBeforeSave?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The versionKey is a property set on each document when first created by Mongoose. This keys value
							 | 
						||
| 
								 | 
							
								     * contains the internal revision of the document. The versionKey option is a string that represents
							 | 
						||
| 
								 | 
							
								     * the path to use for versioning. The default is '__v'.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    versionKey?: string | boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, Mongoose will automatically select() any populated paths for you, unless you explicitly exclude them.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    selectPopulatedPaths?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * skipVersioning allows excluding paths from versioning (i.e., the internal revision will not be
							 | 
						||
| 
								 | 
							
								     * incremented even if these paths are updated). DO NOT do this unless you know what you're doing.
							 | 
						||
| 
								 | 
							
								     * For subdocuments, include this on the parent document using the fully qualified path.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    skipVersioning?: any;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Validation errors in a single nested schema are reported
							 | 
						||
| 
								 | 
							
								     * both on the child and on the parent schema.
							 | 
						||
| 
								 | 
							
								     * Set storeSubdocValidationError to false on the child schema
							 | 
						||
| 
								 | 
							
								     * to make Mongoose only report the parent error.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    storeSubdocValidationError?: boolean;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The timestamps option tells mongoose to assign createdAt and updatedAt fields to your schema. The type
							 | 
						||
| 
								 | 
							
								     * assigned is Date. By default, the names of the fields are createdAt and updatedAt. Customize the
							 | 
						||
| 
								 | 
							
								     * field names by setting timestamps.createdAt and timestamps.updatedAt.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    timestamps?: boolean | SchemaTimestampsConfig;
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Determines whether a type set to a POJO becomes
							 | 
						||
| 
								 | 
							
								     * a Mixed path or a Subdocument (defaults to true).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    typePojoToMixed?: boolean;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface SchemaTimestampsConfig {
							 | 
						||
| 
								 | 
							
								    createdAt?: boolean | string;
							 | 
						||
| 
								 | 
							
								    updatedAt?: boolean | string;
							 | 
						||
| 
								 | 
							
								    currentTime?: () => (NativeDate | number);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type AnyArray<T> = T[] | ReadonlyArray<T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type Unpacked<T> = T extends (infer U)[] ? U : T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export class SchemaTypeOptions<T> {
							 | 
						||
| 
								 | 
							
								    type?:
							 | 
						||
| 
								 | 
							
								      T extends string | number | boolean | NativeDate | Function ? SchemaDefinitionWithBuiltInClass<T> :
							 | 
						||
| 
								 | 
							
								      T extends Schema<any, any> ? T :
							 | 
						||
| 
								 | 
							
								      T extends object[] ? (AnyArray<Schema<Unpacked<T>>> | AnyArray<Schema<Document & Unpacked<T>>> | AnyArray<SchemaDefinition<Unpacked<T>>>) :
							 | 
						||
| 
								 | 
							
								      T extends string[] ? (SchemaDefinitionWithBuiltInClass<string>[] | ReadonlyArray<SchemaDefinitionWithBuiltInClass<string>>) :
							 | 
						||
| 
								 | 
							
								      T extends number[] ? (SchemaDefinitionWithBuiltInClass<number>[] | ReadonlyArray<SchemaDefinitionWithBuiltInClass<number>>) :
							 | 
						||
| 
								 | 
							
								      T extends boolean[] ? (SchemaDefinitionWithBuiltInClass<boolean>[] | ReadonlyArray<SchemaDefinitionWithBuiltInClass<boolean>>) :
							 | 
						||
| 
								 | 
							
								      T extends Function[] ? (SchemaDefinitionWithBuiltInClass<Function>[] | ReadonlyArray<SchemaDefinitionWithBuiltInClass<Function>>) :
							 | 
						||
| 
								 | 
							
								      T | typeof SchemaType | Schema<any, any, any, any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a virtual with the given name that gets/sets this path. */
							 | 
						||
| 
								 | 
							
								    alias?: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Function or object describing how to validate this schematype. See [validation docs](https://mongoosejs.com/docs/validation.html). */
							 | 
						||
| 
								 | 
							
								    validate?: RegExp | [RegExp, string] | Function | [Function, string] | ValidateOpts<T> | ValidateOpts<T>[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Allows overriding casting logic for this individual path. If a string, the given string overwrites Mongoose's default cast error message. */
							 | 
						||
| 
								 | 
							
								    cast?: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If true, attach a required validator to this path, which ensures this path
							 | 
						||
| 
								 | 
							
								     * path cannot be set to a nullish value. If a function, Mongoose calls the
							 | 
						||
| 
								 | 
							
								     * function and only checks for nullish values if the function returns a truthy value.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    required?: boolean | (() => boolean) | [boolean, string] | [() => boolean, string];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The default value for this path. If a function, Mongoose executes the function
							 | 
						||
| 
								 | 
							
								     * and uses the return value as the default.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    default?: T | ((this: any, doc: any) => T);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The model that `populate()` should use if populating this path.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ref?: string | Model<any> | ((this: any, doc: any) => string | Model<any>);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Whether to include or exclude this path by default when loading documents
							 | 
						||
| 
								 | 
							
								     * using `find()`, `findOne()`, etc.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    select?: boolean | number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will
							 | 
						||
| 
								 | 
							
								     * build an index on this path when the model is compiled.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    index?: boolean | number | IndexOptions | '2d' | '2dsphere' | 'hashed' | 'text';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose
							 | 
						||
| 
								 | 
							
								     * will build a unique index on this path when the
							 | 
						||
| 
								 | 
							
								     * model is compiled. [The `unique` option is **not** a validator](/docs/validation.html#the-unique-option-is-not-a-validator).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    unique?: boolean | number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will
							 | 
						||
| 
								 | 
							
								     * disallow changes to this path once the document is saved to the database for the first time. Read more
							 | 
						||
| 
								 | 
							
								     * about [immutability in Mongoose here](http://thecodebarbarian.com/whats-new-in-mongoose-5-6-immutable-properties.html).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    immutable?: boolean | ((this: any, doc: any) => boolean);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose will
							 | 
						||
| 
								 | 
							
								     * build a sparse index on this path.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    sparse?: boolean | number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [truthy](https://masteringjs.io/tutorials/fundamentals/truthy), Mongoose
							 | 
						||
| 
								 | 
							
								     * will build a text index on this path.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    text?: boolean | number | any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Define a transform function for this individual schema type.
							 | 
						||
| 
								 | 
							
								     * Only called when calling `toJSON()` or `toObject()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    transform?: (this: any, val: T) => any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** defines a custom getter for this property using [`Object.defineProperty()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). */
							 | 
						||
| 
								 | 
							
								    get?: (value: T, schematype?: this) => any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** defines a custom setter for this property using [`Object.defineProperty()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). */
							 | 
						||
| 
								 | 
							
								    set?: (value: T, schematype?: this) => any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** array of allowed values for this path. Allowed for strings, numbers, and arrays of strings */
							 | 
						||
| 
								 | 
							
								    enum?: Array<string | number | null> | ReadonlyArray<string | number | null> | { values: Array<string | number | null> | ReadonlyArray<string | number | null>, message?: string } | { [path: string]: string | number | null };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The default [subtype](http://bsonspec.org/spec.html) associated with this buffer when it is stored in MongoDB. Only allowed for buffer paths */
							 | 
						||
| 
								 | 
							
								    subtype?: number
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The minimum value allowed for this path. Only allowed for numbers and dates. */
							 | 
						||
| 
								 | 
							
								    min?: number | NativeDate | [number, string] | [NativeDate, string] | readonly [number, string] | readonly [NativeDate, string];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The maximum value allowed for this path. Only allowed for numbers and dates. */
							 | 
						||
| 
								 | 
							
								    max?: number | NativeDate | [number, string] | [NativeDate, string] | readonly [number, string] | readonly [NativeDate, string];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a TTL index on this path. Only allowed for dates. */
							 | 
						||
| 
								 | 
							
								    expires?: string | number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If `true`, Mongoose will skip gathering indexes on subpaths. Only allowed for subdocuments and subdocument arrays. */
							 | 
						||
| 
								 | 
							
								    excludeIndexes?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If set, overrides the child schema's `_id` option. Only allowed for subdocuments and subdocument arrays. */
							 | 
						||
| 
								 | 
							
								    _id?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If set, specifies the type of this map's values. Mongoose will cast this map's values to the given type. */
							 | 
						||
| 
								 | 
							
								    of?: Function | SchemaDefinitionProperty<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If true, uses Mongoose's default `_id` settings. Only allowed for ObjectIds */
							 | 
						||
| 
								 | 
							
								    auto?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Attaches a validator that succeeds if the data string matches the given regular expression, and fails otherwise. */
							 | 
						||
| 
								 | 
							
								    match?: RegExp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If truthy, Mongoose will add a custom setter that lowercases this string using JavaScript's built-in `String#toLowerCase()`. */
							 | 
						||
| 
								 | 
							
								    lowercase?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If truthy, Mongoose will add a custom setter that removes leading and trailing whitespace using JavaScript's built-in `String#trim()`. */
							 | 
						||
| 
								 | 
							
								    trim?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If truthy, Mongoose will add a custom setter that uppercases this string using JavaScript's built-in `String#toUpperCase()`. */
							 | 
						||
| 
								 | 
							
								    uppercase?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If set, Mongoose will add a custom validator that ensures the given string's `length` is at least the given number. */
							 | 
						||
| 
								 | 
							
								    minlength?: number | [number, string] | readonly [number, string];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If set, Mongoose will add a custom validator that ensures the given string's `length` is at most the given number. */
							 | 
						||
| 
								 | 
							
								    maxlength?: number | [number, string] | readonly [number, string];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [other: string]: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type RefType =
							 | 
						||
| 
								 | 
							
								    | number
							 | 
						||
| 
								 | 
							
								    | string
							 | 
						||
| 
								 | 
							
								    | Buffer
							 | 
						||
| 
								 | 
							
								    | undefined
							 | 
						||
| 
								 | 
							
								    | mongoose.Types.ObjectId
							 | 
						||
| 
								 | 
							
								    | mongoose.Types.Buffer
							 | 
						||
| 
								 | 
							
								    | typeof mongoose.Schema.Types.Number
							 | 
						||
| 
								 | 
							
								    | typeof mongoose.Schema.Types.String
							 | 
						||
| 
								 | 
							
								    | typeof mongoose.Schema.Types.Buffer
							 | 
						||
| 
								 | 
							
								    | typeof mongoose.Schema.Types.ObjectId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * Reference another Model
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  export type PopulatedDoc<
							 | 
						||
| 
								 | 
							
								    PopulatedType,
							 | 
						||
| 
								 | 
							
								    RawId extends RefType = (PopulatedType extends { _id?: RefType; } ? NonNullable<PopulatedType['_id']> : mongoose.Types.ObjectId) | undefined
							 | 
						||
| 
								 | 
							
								    > = PopulatedType | RawId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface IndexOptions extends mongodb.IndexOptions {
							 | 
						||
| 
								 | 
							
								    expires?: number | string;
							 | 
						||
| 
								 | 
							
								    weights?: AnyObject;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ValidatorProps {
							 | 
						||
| 
								 | 
							
								    path: string;
							 | 
						||
| 
								 | 
							
								    value: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ValidatorMessageFn {
							 | 
						||
| 
								 | 
							
								    (props: ValidatorProps): string;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ValidateFn<T> {
							 | 
						||
| 
								 | 
							
								    (value: T): boolean;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface LegacyAsyncValidateFn<T> {
							 | 
						||
| 
								 | 
							
								    (value: T, done: (result: boolean) => void): void;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface AsyncValidateFn<T> {
							 | 
						||
| 
								 | 
							
								    (value: any): Promise<boolean>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface ValidateOpts<T> {
							 | 
						||
| 
								 | 
							
								    msg?: string;
							 | 
						||
| 
								 | 
							
								    message?: string | ValidatorMessageFn;
							 | 
						||
| 
								 | 
							
								    type?: string;
							 | 
						||
| 
								 | 
							
								    validator: ValidateFn<T> | LegacyAsyncValidateFn<T> | AsyncValidateFn<T>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface VirtualTypeOptions {
							 | 
						||
| 
								 | 
							
								    /** If `ref` is not nullish, this becomes a populated virtual. */
							 | 
						||
| 
								 | 
							
								    ref?: string | Function;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**  The local field to populate on if this is a populated virtual. */
							 | 
						||
| 
								 | 
							
								    localField?: string | Function;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The foreign field to populate on if this is a populated virtual. */
							 | 
						||
| 
								 | 
							
								    foreignField?: string | Function;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * By default, a populated virtual is an array. If you set `justOne`,
							 | 
						||
| 
								 | 
							
								     * the populated virtual will be a single doc or `null`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    justOne?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** If you set this to `true`, Mongoose will call any custom getters you defined on this virtual. */
							 | 
						||
| 
								 | 
							
								    getters?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If you set this to `true`, `populate()` will set this virtual to the number of populated
							 | 
						||
| 
								 | 
							
								     * documents, as opposed to the documents themselves, using `Query#countDocuments()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    count?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Add an extra match condition to `populate()`. */
							 | 
						||
| 
								 | 
							
								    match?: FilterQuery<any> | Function;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Add a default `limit` to the `populate()` query. */
							 | 
						||
| 
								 | 
							
								    limit?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Add a default `skip` to the `populate()` query. */
							 | 
						||
| 
								 | 
							
								    skip?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * For legacy reasons, `limit` with `populate()` may give incorrect results because it only
							 | 
						||
| 
								 | 
							
								     * executes a single query for every document being populated. If you set `perDocumentLimit`,
							 | 
						||
| 
								 | 
							
								     * Mongoose will ensure correct `limit` per document by executing a separate query for each
							 | 
						||
| 
								 | 
							
								     * document to `populate()`. For example, `.find().populate({ path: 'test', perDocumentLimit: 2 })`
							 | 
						||
| 
								 | 
							
								     * will execute 2 additional queries if `.find()` returns 2 documents.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    perDocumentLimit?: number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Additional options like `limit` and `lean`. */
							 | 
						||
| 
								 | 
							
								    options?: QueryOptions & { match?: AnyObject };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Additional options for plugins */
							 | 
						||
| 
								 | 
							
								    [extra: string]: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class VirtualType {
							 | 
						||
| 
								 | 
							
								    /** Applies getters to `value`. */
							 | 
						||
| 
								 | 
							
								    applyGetters(value: any, doc: Document): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Applies setters to `value`. */
							 | 
						||
| 
								 | 
							
								    applySetters(value: any, doc: Document): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a custom getter to this virtual. */
							 | 
						||
| 
								 | 
							
								    get(fn: Function): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a custom setter to this virtual. */
							 | 
						||
| 
								 | 
							
								    set(fn: Function): this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  namespace Schema {
							 | 
						||
| 
								 | 
							
								    namespace Types {
							 | 
						||
| 
								 | 
							
								      class Array extends SchemaType implements AcceptsDiscriminator {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static options: { castNonArrays: boolean; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        discriminator<D>(name: string | number, schema: Schema, value?: string): Model<D>;
							 | 
						||
| 
								 | 
							
								        discriminator<T, U>(name: string | number, schema: Schema<T, U>, value?: string): U;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * Adds an enum validator if this is an array of strings or numbers. Equivalent to
							 | 
						||
| 
								 | 
							
								         * `SchemaString.prototype.enum()` or `SchemaNumber.prototype.enum()`
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        enum(vals: string[] | number[]): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Boolean extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Configure which values get casted to `true`. */
							 | 
						||
| 
								 | 
							
								        static convertToTrue: Set<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Configure which values get casted to `false`. */
							 | 
						||
| 
								 | 
							
								        static convertToFalse: Set<any>;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Buffer extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * Sets the default [subtype](https://studio3t.com/whats-new/best-practices-uuid-mongodb/)
							 | 
						||
| 
								 | 
							
								         * for this buffer. You can find a [list of allowed subtypes here](http://api.mongodb.com/python/current/api/bson/binary.html).
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        subtype(subtype: number): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Date extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Declares a TTL index (rounded to the nearest second) for _Date_ types only. */
							 | 
						||
| 
								 | 
							
								        expires(when: number | string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a maximum date validator. */
							 | 
						||
| 
								 | 
							
								        max(value: NativeDate, message: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a minimum date validator. */
							 | 
						||
| 
								 | 
							
								        min(value: NativeDate, message: string): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Decimal128 extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class DocumentArray extends SchemaType implements AcceptsDiscriminator {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static options: { castNonArrays: boolean; };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        discriminator<D>(name: string | number, schema: Schema, value?: string): Model<D>;
							 | 
						||
| 
								 | 
							
								        discriminator<T, U>(name: string | number, schema: Schema<T, U>, value?: string): U;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** The schema used for documents in this array */
							 | 
						||
| 
								 | 
							
								        schema: Schema;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Map extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Mixed extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Number extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a enum validator */
							 | 
						||
| 
								 | 
							
								        enum(vals: number[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a maximum number validator. */
							 | 
						||
| 
								 | 
							
								        max(value: number, message: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a minimum number validator. */
							 | 
						||
| 
								 | 
							
								        min(value: number, message: string): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class ObjectId extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Adds an auto-generated ObjectId default if turnOn is true. */
							 | 
						||
| 
								 | 
							
								        auto(turnOn: boolean): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class Embedded extends SchemaType implements AcceptsDiscriminator {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** The document's schema */
							 | 
						||
| 
								 | 
							
								        schema: Schema;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        discriminator<D>(name: string | number, schema: Schema, value?: string): Model<D>;
							 | 
						||
| 
								 | 
							
								        discriminator<T, U>(name: string | number, schema: Schema<T, U>, value?: string): U;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      class String extends SchemaType {
							 | 
						||
| 
								 | 
							
								        /** This schema type's name, to defend against minifiers that mangle function names. */
							 | 
						||
| 
								 | 
							
								        static schemaName: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Adds an enum validator */
							 | 
						||
| 
								 | 
							
								        enum(vals: string[] | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Adds a lowercase [setter](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set). */
							 | 
						||
| 
								 | 
							
								        lowercase(shouldApply?: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a regexp validator. */
							 | 
						||
| 
								 | 
							
								        match(value: RegExp, message: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a maximum length validator. */
							 | 
						||
| 
								 | 
							
								        maxlength(value: number, message: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Sets a minimum length validator. */
							 | 
						||
| 
								 | 
							
								        minlength(value: number, message: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Adds a trim [setter](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set). */
							 | 
						||
| 
								 | 
							
								        trim(shouldTrim?: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /** Adds an uppercase [setter](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set). */
							 | 
						||
| 
								 | 
							
								        uppercase(shouldApply?: boolean): this;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  namespace Types {
							 | 
						||
| 
								 | 
							
								    class Array<T> extends global.Array<T> {
							 | 
						||
| 
								 | 
							
								      /** Pops the array atomically at most one time per document `save()`. */
							 | 
						||
| 
								 | 
							
								      $pop(): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Atomically shifts the array at most one time per document `save()`. */
							 | 
						||
| 
								 | 
							
								      $shift(): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Adds values to the array if not already present. */
							 | 
						||
| 
								 | 
							
								      addToSet(...args: any[]): any[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      isMongooseArray: true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Pushes items to the array non-atomically. */
							 | 
						||
| 
								 | 
							
								      nonAtomicPush(...args: any[]): number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Wraps [`Array#push`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/push) with proper change tracking. */
							 | 
						||
| 
								 | 
							
								      push(...args: any[]): number;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Pulls items from the array atomically. Equality is determined by casting
							 | 
						||
| 
								 | 
							
								       * the provided value to an embedded document and comparing using
							 | 
						||
| 
								 | 
							
								       * [the `Document.equals()` function.](./api.html#document_Document-equals)
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      pull(...args: any[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Alias of [pull](#mongoosearray_MongooseArray-pull)
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      remove(...args: any[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Sets the casted `val` at index `i` and marks the array modified. */
							 | 
						||
| 
								 | 
							
								      set(i: number, val: T): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Atomically shifts the array at most one time per document `save()`. */
							 | 
						||
| 
								 | 
							
								      shift(): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns a native js Array. */
							 | 
						||
| 
								 | 
							
								      toObject(options?: ToObjectOptions): any;
							 | 
						||
| 
								 | 
							
								      toObject<T>(options?: ToObjectOptions): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Wraps [`Array#unshift`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/unshift) with proper change tracking. */
							 | 
						||
| 
								 | 
							
								      unshift(...args: any[]): number;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Buffer extends global.Buffer {
							 | 
						||
| 
								 | 
							
								      /** Sets the subtype option and marks the buffer modified. */
							 | 
						||
| 
								 | 
							
								      subtype(subtype: number | ToObjectOptions): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Converts this buffer to its Binary type representation. */
							 | 
						||
| 
								 | 
							
								      toObject(subtype?: number): mongodb.Binary;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Decimal128 extends mongodb.Decimal128 { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class DocumentArray<T extends Document> extends Types.Array<T> {
							 | 
						||
| 
								 | 
							
								      /** DocumentArray constructor */
							 | 
						||
| 
								 | 
							
								      constructor(values: any[]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      isMongooseDocumentArray: true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Creates a subdocument casted to this schema. */
							 | 
						||
| 
								 | 
							
								      create(obj: any): T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Searches array items for the first document with a matching _id. */
							 | 
						||
| 
								 | 
							
								      id(id: any): T | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      push(...args: (AnyKeys<T> & AnyObject)[]): number;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class EmbeddedDocument extends Document {
							 | 
						||
| 
								 | 
							
								      /** Returns the top level document of this sub-document. */
							 | 
						||
| 
								 | 
							
								      ownerDocument(): Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns this sub-documents parent document. */
							 | 
						||
| 
								 | 
							
								      parent(): Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns this sub-documents parent document. */
							 | 
						||
| 
								 | 
							
								      $parent(): Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns this sub-documents parent array. */
							 | 
						||
| 
								 | 
							
								      parentArray(): DocumentArray<Document>;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Map<V> extends global.Map<string, V> {
							 | 
						||
| 
								 | 
							
								      /** Converts a Mongoose map into a vanilla JavaScript map. */
							 | 
						||
| 
								 | 
							
								      toObject(options?: ToObjectOptions & { flattenMaps?: boolean }): any;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const ObjectId: ObjectIdConstructor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class _ObjectId extends mongodb.ObjectID {
							 | 
						||
| 
								 | 
							
								      _id?: ObjectId;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Expose static methods of `mongodb.ObjectID` and allow calling without `new`
							 | 
						||
| 
								 | 
							
								    type ObjectIdConstructor = typeof _ObjectId & {
							 | 
						||
| 
								 | 
							
								      (val?: string | number): ObjectId;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // var objectId: mongoose.Types.ObjectId should reference mongodb.ObjectID not
							 | 
						||
| 
								 | 
							
								    //   the ObjectIdConstructor, so we add the interface below
							 | 
						||
| 
								 | 
							
								    // eslint-disable-next-line @typescript-eslint/no-empty-interface
							 | 
						||
| 
								 | 
							
								    interface ObjectId extends mongodb.ObjectID { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Subdocument extends Document {
							 | 
						||
| 
								 | 
							
								      $isSingleNested: true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns the top level document of this sub-document. */
							 | 
						||
| 
								 | 
							
								      ownerDocument(): Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns this sub-documents parent document. */
							 | 
						||
| 
								 | 
							
								      parent(): Document;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /** Returns this sub-documents parent document. */
							 | 
						||
| 
								 | 
							
								      $parent(): Document;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type ReturnsNewDoc = { new: true } | { returnOriginal: false } | {returnDocument: 'after'};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type QueryWithHelpers<ResultType, DocType, THelpers = {}, RawDocType = DocType> = Query<ResultType, DocType, THelpers, RawDocType> & THelpers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Query<ResultType, DocType, THelpers = {}, RawDocType = DocType> {
							 | 
						||
| 
								 | 
							
								    _mongooseOptions: MongooseQueryOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns a wrapper around a [mongodb driver cursor](http://mongodb.github.io/node-mongodb-native/2.1/api/Cursor.html).
							 | 
						||
| 
								 | 
							
								     * A QueryCursor exposes a Streams3 interface, as well as a `.next()` function.
							 | 
						||
| 
								 | 
							
								     * This is equivalent to calling `.cursor()` with no arguments.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    [Symbol.asyncIterator](): AsyncIterableIterator<DocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Executes the query */
							 | 
						||
| 
								 | 
							
								    exec(): Promise<ResultType>;
							 | 
						||
| 
								 | 
							
								    exec(callback?: Callback<ResultType>): void;
							 | 
						||
| 
								 | 
							
								    // @todo: this doesn't seem right
							 | 
						||
| 
								 | 
							
								    exec(callback?: Callback<ResultType>): Promise<ResultType> | any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $where(argument: string | Function): QueryWithHelpers<DocType[], DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies an `$all` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    all(val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								    all(path: string, val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies arguments for an `$and` condition. */
							 | 
						||
| 
								 | 
							
								    and(array: FilterQuery<DocType>[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the batchSize option. */
							 | 
						||
| 
								 | 
							
								    batchSize(val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$box` condition */
							 | 
						||
| 
								 | 
							
								    box(val: any): this;
							 | 
						||
| 
								 | 
							
								    box(lower: number[], upper: number[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Casts this query to the schema of `model`.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {Model} [model] the model to cast to. If not set, defaults to `this.model`
							 | 
						||
| 
								 | 
							
								     * @param {Object} [obj] If not set, defaults to this query's conditions
							 | 
						||
| 
								 | 
							
								     * @return {Object} the casted `obj`
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    cast(model?: Model<any, THelpers> | null, obj?: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Executes the query returning a `Promise` which will be
							 | 
						||
| 
								 | 
							
								     * resolved with either the doc(s) or rejected with the error.
							 | 
						||
| 
								 | 
							
								     * Like `.then()`, but only takes a rejection handler.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    catch: Promise<ResultType>['catch'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$center` or `$centerSphere` condition. */
							 | 
						||
| 
								 | 
							
								    circle(area: any): this;
							 | 
						||
| 
								 | 
							
								    circle(path: string, area: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a collation to this op (MongoDB 3.4 and up) */
							 | 
						||
| 
								 | 
							
								    collation(value: mongodb.CollationDocument): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the `comment` option. */
							 | 
						||
| 
								 | 
							
								    comment(val: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies this query as a `count` query. */
							 | 
						||
| 
								 | 
							
								    count(callback?: Callback<number>): QueryWithHelpers<number, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    count(criteria: FilterQuery<DocType>, callback?: Callback<number>): QueryWithHelpers<number, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies this query as a `countDocuments` query. */
							 | 
						||
| 
								 | 
							
								    countDocuments(callback?: Callback<number>): QueryWithHelpers<number, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    countDocuments(criteria: FilterQuery<DocType>, callback?: Callback<number>): QueryWithHelpers<number, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns a wrapper around a [mongodb driver cursor](http://mongodb.github.io/node-mongodb-native/2.1/api/Cursor.html).
							 | 
						||
| 
								 | 
							
								     * A QueryCursor exposes a Streams3 interface, as well as a `.next()` function.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    cursor(options?: any): QueryCursor<DocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as a `deleteMany()` operation. Works like
							 | 
						||
| 
								 | 
							
								     * remove, except it deletes _every_ document that matches `filter` in the
							 | 
						||
| 
								 | 
							
								     * collection, regardless of the value of `single`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    deleteMany(filter?: FilterQuery<DocType>, options?: QueryOptions, callback?: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    deleteMany(filter: FilterQuery<DocType>, callback: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    deleteMany(callback: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as a `deleteOne()` operation. Works like
							 | 
						||
| 
								 | 
							
								     * remove, except it deletes at most one document regardless of the `single`
							 | 
						||
| 
								 | 
							
								     * option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    deleteOne(filter?: FilterQuery<DocType>, options?: QueryOptions, callback?: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    deleteOne(filter: FilterQuery<DocType>, callback: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    deleteOne(callback: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `distinct` query: returns the distinct values of the given `field` that match `filter`. */
							 | 
						||
| 
								 | 
							
								    distinct(field: string, filter?: FilterQuery<DocType>, callback?: Callback<number>): QueryWithHelpers<Array<any>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$elemMatch` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    elemMatch(val: Function | any): this;
							 | 
						||
| 
								 | 
							
								    elemMatch(path: string, val: Function | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Gets/sets the error flag on this query. If this flag is not null or
							 | 
						||
| 
								 | 
							
								     * undefined, the `exec()` promise will reject without executing.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    error(): NativeError | null;
							 | 
						||
| 
								 | 
							
								    error(val: NativeError | null): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the complementary comparison value for paths specified with `where()` */
							 | 
						||
| 
								 | 
							
								    equals(val: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `estimatedDocumentCount` query: counts the number of documents in the collection. */
							 | 
						||
| 
								 | 
							
								    estimatedDocumentCount(options?: QueryOptions, callback?: Callback<number>): QueryWithHelpers<number, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$exists` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    exists(val: boolean): this;
							 | 
						||
| 
								 | 
							
								    exists(path: string, val: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the [`explain` option](https://docs.mongodb.com/manual/reference/method/cursor.explain/),
							 | 
						||
| 
								 | 
							
								     * which makes this query return detailed execution stats instead of the actual
							 | 
						||
| 
								 | 
							
								     * query result. This method is useful for determining what index your queries
							 | 
						||
| 
								 | 
							
								     * use.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    explain(verbose?: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `find` query: gets a list of documents that match `filter`. */
							 | 
						||
| 
								 | 
							
								    find(callback?: Callback<DocType[]>): QueryWithHelpers<Array<DocType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    find(filter: FilterQuery<DocType>, callback?: Callback<DocType[]>): QueryWithHelpers<Array<DocType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    find(filter: FilterQuery<DocType>, projection?: any | null, options?: QueryOptions | null, callback?: Callback<DocType[]>): QueryWithHelpers<Array<DocType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares the query a findOne operation. When executed, the first found document is passed to the callback. */
							 | 
						||
| 
								 | 
							
								    findOne(filter?: FilterQuery<DocType>, projection?: any | null, options?: QueryOptions | null, callback?: Callback<DocType | null>): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndDelete` query: atomically finds the given document, deletes it, and returns the document as it was before deletion. */
							 | 
						||
| 
								 | 
							
								    findOneAndDelete(filter?: FilterQuery<DocType>, options?: QueryOptions | null, callback?: (err: CallbackError, doc: DocType | null, res: any) => void): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndRemove` query: atomically finds the given document and deletes it. */
							 | 
						||
| 
								 | 
							
								    findOneAndRemove(filter?: FilterQuery<DocType>, options?: QueryOptions | null, callback?: (err: CallbackError, doc: DocType | null, res: any) => void): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndUpdate` query: atomically find the first document that matches `filter` and apply `update`. */
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter: FilterQuery<DocType>, update: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options: QueryOptions & { rawResult: true }, callback?: (err: CallbackError, doc: mongodb.FindAndModifyWriteOpResultObject<DocType>, res: any) => void): QueryWithHelpers<mongodb.FindAndModifyWriteOpResultObject<DocType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter: FilterQuery<DocType>, update: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options: QueryOptions & { upsert: true } & ReturnsNewDoc, callback?: (err: CallbackError, doc: DocType, res: any) => void): QueryWithHelpers<DocType, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    findOneAndUpdate(filter?: FilterQuery<DocType>, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: (err: CallbackError, doc: DocType | null, res: any) => void): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findByIdAndDelete` query, filtering by the given `_id`. */
							 | 
						||
| 
								 | 
							
								    findByIdAndDelete(id?: mongodb.ObjectId | any, options?: QueryOptions | null, callback?: (err: CallbackError, doc: DocType | null, res: any) => void): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Creates a `findOneAndUpdate` query, filtering by the given `_id`. */
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id: mongodb.ObjectId | any, update: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options: QueryOptions & { rawResult: true }, callback?: (err: CallbackError, doc: mongodb.FindAndModifyWriteOpResultObject<DocType>, res: any) => void): QueryWithHelpers<mongodb.FindAndModifyWriteOpResultObject<DocType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id: mongodb.ObjectId | any, update: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options: QueryOptions & { upsert: true } & ReturnsNewDoc, callback?: (err: CallbackError, doc: DocType, res: any) => void): QueryWithHelpers<DocType, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    findByIdAndUpdate(id?: mongodb.ObjectId | any, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: (err: CallbackError, doc: DocType | null, res: any) => void): QueryWithHelpers<DocType | null, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$geometry` condition */
							 | 
						||
| 
								 | 
							
								    geometry(object: { type: string, coordinates: any[] }): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * For update operations, returns the value of a path in the update's `$set`.
							 | 
						||
| 
								 | 
							
								     * Useful for writing getters/setters that can work with both update operations
							 | 
						||
| 
								 | 
							
								     * and `save()`.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    get(path: string): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the current query filter (also known as conditions) as a POJO. */
							 | 
						||
| 
								 | 
							
								    getFilter(): FilterQuery<DocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets query options. */
							 | 
						||
| 
								 | 
							
								    getOptions(): QueryOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Gets a list of paths to be populated by this query */
							 | 
						||
| 
								 | 
							
								    getPopulatedPaths(): Array<string>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the current query filter. Equivalent to `getFilter()`. */
							 | 
						||
| 
								 | 
							
								    getQuery(): FilterQuery<DocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the current update operations as a JSON object. */
							 | 
						||
| 
								 | 
							
								    getUpdate(): UpdateQuery<DocType> | UpdateWithAggregationPipeline | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$gt` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    gt(val: number): this;
							 | 
						||
| 
								 | 
							
								    gt(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$gte` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    gte(val: number): this;
							 | 
						||
| 
								 | 
							
								    gte(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets query hints. */
							 | 
						||
| 
								 | 
							
								    hint(val: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies an `$in` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    in(val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								    in(path: string, val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares an intersects query for `geometry()`. */
							 | 
						||
| 
								 | 
							
								    intersects(arg?: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Requests acknowledgement that this operation has been persisted to MongoDB's on-disk journal. */
							 | 
						||
| 
								 | 
							
								    j(val: boolean | null): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the lean option. */
							 | 
						||
| 
								 | 
							
								    lean<LeanResultType = RawDocType extends Document ? LeanDocumentOrArray<ResultType> : LeanDocumentOrArrayWithRawType<ResultType, RawDocType>>(val?: boolean | any): QueryWithHelpers<LeanResultType, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the maximum number of documents the query will return. */
							 | 
						||
| 
								 | 
							
								    limit(val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$lt` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    lt(val: number): this;
							 | 
						||
| 
								 | 
							
								    lt(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$lte` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    lte(val: number): this;
							 | 
						||
| 
								 | 
							
								    lte(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Runs a function `fn` and treats the return value of `fn` as the new value
							 | 
						||
| 
								 | 
							
								     * for the query to resolve to.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    map<MappedType>(fn: (doc: ResultType) => MappedType): QueryWithHelpers<MappedType, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies an `$maxDistance` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    maxDistance(val: number): this;
							 | 
						||
| 
								 | 
							
								    maxDistance(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the maxScan option. */
							 | 
						||
| 
								 | 
							
								    maxScan(val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the [maxTimeMS](https://docs.mongodb.com/manual/reference/method/cursor.maxTimeMS/)
							 | 
						||
| 
								 | 
							
								     * option. This will tell the MongoDB server to abort if the query or write op
							 | 
						||
| 
								 | 
							
								     * has been running for more than `ms` milliseconds.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    maxTimeMS(ms: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Merges another Query or conditions object into this one. */
							 | 
						||
| 
								 | 
							
								    merge(source: Query<any, any> | FilterQuery<DocType>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$mod` condition, filters documents for documents whose `path` property is a number that is equal to `remainder` modulo `divisor`. */
							 | 
						||
| 
								 | 
							
								    mod(val: Array<number>): this;
							 | 
						||
| 
								 | 
							
								    mod(path: string, val: Array<number>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The model this query was created from */
							 | 
						||
| 
								 | 
							
								    model: typeof Model;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Getter/setter around the current mongoose-specific options for this query
							 | 
						||
| 
								 | 
							
								     * Below are the current Mongoose-specific options.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    mongooseOptions(val?: MongooseQueryOptions): MongooseQueryOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$ne` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    ne(val: any): this;
							 | 
						||
| 
								 | 
							
								    ne(path: string, val: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$near` or `$nearSphere` condition */
							 | 
						||
| 
								 | 
							
								    near(val: any): this;
							 | 
						||
| 
								 | 
							
								    near(path: string, val: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies an `$nin` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    nin(val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								    nin(path: string, val: Array<any>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies arguments for an `$nor` condition. */
							 | 
						||
| 
								 | 
							
								    nor(array: Array<FilterQuery<DocType>>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies arguments for an `$or` condition. */
							 | 
						||
| 
								 | 
							
								    or(array: Array<FilterQuery<DocType>>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Make this query throw an error if no documents match the given `filter`.
							 | 
						||
| 
								 | 
							
								     * This is handy for integrating with async/await, because `orFail()` saves you
							 | 
						||
| 
								 | 
							
								     * an extra `if` statement to check if no document was found.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    orFail(err?: NativeError | (() => NativeError)): QueryWithHelpers<NonNullable<ResultType>, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$polygon` condition */
							 | 
						||
| 
								 | 
							
								    polygon(...coordinatePairs: number[][]): this;
							 | 
						||
| 
								 | 
							
								    polygon(path: string, ...coordinatePairs: number[][]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies paths which should be populated with other documents. */
							 | 
						||
| 
								 | 
							
								    populate(path: string | any, select?: string | any, model?: string | Model<any, THelpers>, match?: any): this;
							 | 
						||
| 
								 | 
							
								    populate(options: PopulateOptions | Array<PopulateOptions>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Get/set the current projection (AKA fields). Pass `null` to remove the current projection. */
							 | 
						||
| 
								 | 
							
								    projection(fields?: any | null): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Determines the MongoDB nodes from which to read. */
							 | 
						||
| 
								 | 
							
								    read(pref: string | mongodb.ReadPreferenceMode, tags?: any[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the readConcern option for the query. */
							 | 
						||
| 
								 | 
							
								    readConcern(level: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$regex` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    regex(val: string | RegExp): this;
							 | 
						||
| 
								 | 
							
								    regex(path: string, val: string | RegExp): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as a remove() operation. `remove()` is
							 | 
						||
| 
								 | 
							
								     * deprecated, you should use [`deleteOne()`](#query_Query-deleteOne)
							 | 
						||
| 
								 | 
							
								     * or [`deleteMany()`](#query_Query-deleteMany) instead.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    remove(filter?: FilterQuery<DocType>, callback?: Callback<mongodb.WriteOpResult['result']>): QueryWithHelpers<mongodb.WriteOpResult['result'], DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as a replaceOne() operation. Same as
							 | 
						||
| 
								 | 
							
								     * `update()`, except MongoDB will replace the existing document and will
							 | 
						||
| 
								 | 
							
								     * not accept any [atomic](https://docs.mongodb.com/manual/tutorial/model-data-for-atomic-operations/#pattern) operators (`$set`, etc.)
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    replaceOne(filter?: FilterQuery<DocType>, replacement?: DocumentDefinition<DocType>, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								    replaceOne(filter?: FilterQuery<DocType>, replacement?: Object, options?: QueryOptions | null, callback?: Callback): QueryWithHelpers<any, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies which document fields to include or exclude (also known as the query "projection") */
							 | 
						||
| 
								 | 
							
								    select(arg: string | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Determines if field selection has been made. */
							 | 
						||
| 
								 | 
							
								    selected(): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Determines if exclusive field selection has been made. */
							 | 
						||
| 
								 | 
							
								    selectedExclusively(): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Determines if inclusive field selection has been made. */
							 | 
						||
| 
								 | 
							
								    selectedInclusively(): boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the [MongoDB session](https://docs.mongodb.com/manual/reference/server-sessions/)
							 | 
						||
| 
								 | 
							
								     * associated with this query. Sessions are how you mark a query as part of a
							 | 
						||
| 
								 | 
							
								     * [transaction](/docs/transactions.html).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    session(session: mongodb.ClientSession | null): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Adds a `$set` to this query's update without changing the operation.
							 | 
						||
| 
								 | 
							
								     * This is useful for query middleware so you can add an update regardless
							 | 
						||
| 
								 | 
							
								     * of whether you use `updateOne()`, `updateMany()`, `findOneAndUpdate()`, etc.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    set(path: string | Record<string, unknown>, value?: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets query options. Some options only make sense for certain operations. */
							 | 
						||
| 
								 | 
							
								    setOptions(options: QueryOptions, overwrite?: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the query conditions to the provided JSON object. */
							 | 
						||
| 
								 | 
							
								    setQuery(val: FilterQuery<DocType> | null): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    setUpdate(update: UpdateQuery<DocType> | UpdateWithAggregationPipeline): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies an `$size` query condition. When called with one argument, the most recent path passed to `where()` is used. */
							 | 
						||
| 
								 | 
							
								    size(val: number): this;
							 | 
						||
| 
								 | 
							
								    size(path: string, val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies the number of documents to skip. */
							 | 
						||
| 
								 | 
							
								    skip(val: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a `$slice` projection for an array. */
							 | 
						||
| 
								 | 
							
								    slice(val: number | Array<number>): this;
							 | 
						||
| 
								 | 
							
								    slice(path: string, val: number | Array<number>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies this query as a `snapshot` query. */
							 | 
						||
| 
								 | 
							
								    snapshot(val?: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the sort order. If an object is passed, values allowed are `asc`, `desc`, `ascending`, `descending`, `1`, and `-1`. */
							 | 
						||
| 
								 | 
							
								    sort(arg: string | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the tailable option (for use with capped collections). */
							 | 
						||
| 
								 | 
							
								    tailable(bool?: boolean, opts?: {
							 | 
						||
| 
								 | 
							
								      numberOfRetries?: number;
							 | 
						||
| 
								 | 
							
								      tailableRetryInterval?: number;
							 | 
						||
| 
								 | 
							
								    }): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Executes the query returning a `Promise` which will be
							 | 
						||
| 
								 | 
							
								     * resolved with either the doc(s) or rejected with the error.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    then: Promise<ResultType>['then'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Converts this query to a customized, reusable query constructor with all arguments and options retained. */
							 | 
						||
| 
								 | 
							
								    toConstructor(): new (...args: any[]) => QueryWithHelpers<ResultType, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declare and/or execute this query as an update() operation. */
							 | 
						||
| 
								 | 
							
								    update(filter?: FilterQuery<DocType>, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback<UpdateWriteOpResult>): QueryWithHelpers<UpdateWriteOpResult, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as an updateMany() operation. Same as
							 | 
						||
| 
								 | 
							
								     * `update()`, except MongoDB will update _all_ documents that match
							 | 
						||
| 
								 | 
							
								     * `filter` (as opposed to just the first one) regardless of the value of
							 | 
						||
| 
								 | 
							
								     * the `multi` option.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    updateMany(filter?: FilterQuery<DocType>, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback<UpdateWriteOpResult>): QueryWithHelpers<UpdateWriteOpResult, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Declare and/or execute this query as an updateOne() operation. Same as
							 | 
						||
| 
								 | 
							
								     * `update()`, except it does not support the `multi` or `overwrite` options.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    updateOne(filter?: FilterQuery<DocType>, update?: UpdateQuery<DocType> | UpdateWithAggregationPipeline, options?: QueryOptions | null, callback?: Callback<UpdateWriteOpResult>): QueryWithHelpers<UpdateWriteOpResult, DocType, THelpers, RawDocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the specified number of `mongod` servers, or tag set of `mongod` servers,
							 | 
						||
| 
								 | 
							
								     * that must acknowledge this write before this write is considered successful.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    w(val: string | number | null): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Specifies a path for use with chaining. */
							 | 
						||
| 
								 | 
							
								    where(path: string, val?: any): this;
							 | 
						||
| 
								 | 
							
								    where(obj: object): this;
							 | 
						||
| 
								 | 
							
								    where(): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a `$within` or `$geoWithin` argument for geo-spatial queries. */
							 | 
						||
| 
								 | 
							
								    within(val?: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * If [`w > 1`](/docs/api.html#query_Query-w), the maximum amount of time to
							 | 
						||
| 
								 | 
							
								     * wait for this write to propagate through the replica set before this
							 | 
						||
| 
								 | 
							
								     * operation fails. The default is `0`, which means no timeout.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    wtimeout(ms: number): this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type _FilterQuery<T> = {
							 | 
						||
| 
								 | 
							
								    [P in keyof T]?: mongodb.Condition<[Extract<T[P], mongodb.ObjectId>] extends [never] ? T[P] : T[P] | string>;
							 | 
						||
| 
								 | 
							
								  } &
							 | 
						||
| 
								 | 
							
								    mongodb.RootQuerySelector<T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type FilterQuery<T> = _FilterQuery<T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type NumericTypes = number | mongodb.Decimal128 | mongodb.Double | mongodb.Int32 | mongodb.Long;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type OnlyFieldsOfType<TSchema, FieldType = any, AssignableType = FieldType> = {
							 | 
						||
| 
								 | 
							
								    [key in keyof TSchema]?: [Extract<TSchema[key], FieldType>] extends [never] ? never : AssignableType;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** @see https://docs.mongodb.com/manual/reference/operator/update */
							 | 
						||
| 
								 | 
							
								  type _UpdateQuery<TSchema> = {
							 | 
						||
| 
								 | 
							
								    /** @see https://docs.mongodb.com/manual/reference/operator/update-field/ */
							 | 
						||
| 
								 | 
							
								    $currentDate?: OnlyFieldsOfType<TSchema, NativeDate, true | { $type: 'date' | 'timestamp' }> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $inc?: OnlyFieldsOfType<TSchema, NumericTypes | undefined> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $min?: OnlyFieldsOfType<TSchema, any, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $max?: OnlyFieldsOfType<TSchema, any, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $mul?: OnlyFieldsOfType<TSchema, NumericTypes | undefined> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $rename?: { [key: string]: string };
							 | 
						||
| 
								 | 
							
								    $set?: OnlyFieldsOfType<TSchema, any, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $setOnInsert?: OnlyFieldsOfType<TSchema, any, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $unset?: OnlyFieldsOfType<TSchema, any, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @see https://docs.mongodb.com/manual/reference/operator/update-array/ */
							 | 
						||
| 
								 | 
							
								    $addToSet?: OnlyFieldsOfType<TSchema, any[], any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $pop?: OnlyFieldsOfType<TSchema, ReadonlyArray<any>, 1 | -1> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $pull?: OnlyFieldsOfType<TSchema, ReadonlyArray<any>, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $push?: OnlyFieldsOfType<TSchema, ReadonlyArray<any>, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								    $pullAll?: OnlyFieldsOfType<TSchema, ReadonlyArray<any>, any> & AnyObject;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @see https://docs.mongodb.com/manual/reference/operator/update-bitwise/ */
							 | 
						||
| 
								 | 
							
								    $bit?: {
							 | 
						||
| 
								 | 
							
								      [key: string]: { [key in 'and' | 'or' | 'xor']?: number };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type UpdateWithAggregationPipeline = UpdateAggregationStage[];
							 | 
						||
| 
								 | 
							
								  type UpdateAggregationStage = { $addFields: any } |
							 | 
						||
| 
								 | 
							
								    { $set: any } |
							 | 
						||
| 
								 | 
							
								    { $project: any } |
							 | 
						||
| 
								 | 
							
								    { $unset: any } |
							 | 
						||
| 
								 | 
							
								    { $replaceRoot: any } |
							 | 
						||
| 
								 | 
							
								    { $replaceWith: any };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type __UpdateDefProperty<T> =
							 | 
						||
| 
								 | 
							
								    0 extends (1 & T) ? T : // any
							 | 
						||
| 
								 | 
							
								    T extends unknown[] ? LeanArray<T> : // Array
							 | 
						||
| 
								 | 
							
								    T extends Document ? LeanDocument<T> : // Subdocument
							 | 
						||
| 
								 | 
							
								    [Extract<T, mongodb.ObjectId>] extends [never] ? T :
							 | 
						||
| 
								 | 
							
								    T | string;
							 | 
						||
| 
								 | 
							
								  type __UpdateQueryDef<T> = {
							 | 
						||
| 
								 | 
							
								    [K in keyof T]: __UpdateDefProperty<T[K]>;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  type _UpdateQueryDef<T> = __UpdateQueryDef<T>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type UpdateQuery<T> = (_UpdateQuery<_UpdateQueryDef<T>> & mongodb.MatchKeysAndValues<_UpdateQueryDef<LeanDocument<T>>>);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type DocumentDefinition<T> = {
							 | 
						||
| 
								 | 
							
								    [K in keyof Omit<T, Exclude<keyof Document, '_id' | 'id' | '__v'>>]:
							 | 
						||
| 
								 | 
							
								      [Extract<T[K], mongodb.ObjectId>] extends [never]
							 | 
						||
| 
								 | 
							
								      ? T[K] extends TreatAsPrimitives
							 | 
						||
| 
								 | 
							
								        ? T[K]
							 | 
						||
| 
								 | 
							
								        : LeanDocumentElement<T[K]>
							 | 
						||
| 
								 | 
							
								      : T[K] | string;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type actualPrimitives = string | boolean | number | bigint | symbol | null | undefined;
							 | 
						||
| 
								 | 
							
								  type TreatAsPrimitives = actualPrimitives |
							 | 
						||
| 
								 | 
							
								    NativeDate | RegExp | symbol | Error | BigInt | Types.ObjectId;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type LeanType<T> =
							 | 
						||
| 
								 | 
							
								    0 extends (1 & T) ? T : // any
							 | 
						||
| 
								 | 
							
								    T extends TreatAsPrimitives ? T : // primitives
							 | 
						||
| 
								 | 
							
								    LeanDocument<T>; // Documents and everything else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type LeanArray<T extends unknown[]> = T extends unknown[][] ? LeanArray<T[number]>[] : LeanType<T[number]>[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type _LeanDocument<T> = {
							 | 
						||
| 
								 | 
							
								    [K in keyof T]: LeanDocumentElement<T[K]>;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Keep this a separate type, to ensure that T is a naked type.
							 | 
						||
| 
								 | 
							
								  // This way, the conditional type is distributive over union types.
							 | 
						||
| 
								 | 
							
								  // This is required for PopulatedDoc.
							 | 
						||
| 
								 | 
							
								  type LeanDocumentElement<T> =
							 | 
						||
| 
								 | 
							
								    0 extends (1 & T) ? T : // any
							 | 
						||
| 
								 | 
							
								    T extends unknown[] ? LeanArray<T> : // Array
							 | 
						||
| 
								 | 
							
								    T extends Document ? LeanDocument<T> : // Subdocument
							 | 
						||
| 
								 | 
							
								    T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type LeanDocument<T> = Omit<_LeanDocument<T>, Exclude<keyof Document, '_id' | 'id' | '__v'> | '$isSingleNested'>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type LeanDocumentOrArray<T> = 0 extends (1 & T) ? T :
							 | 
						||
| 
								 | 
							
								    T extends unknown[] ? LeanDocument<T[number]>[] :
							 | 
						||
| 
								 | 
							
								    T extends Document ? LeanDocument<T> :
							 | 
						||
| 
								 | 
							
								    T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type LeanDocumentOrArrayWithRawType<T, RawDocType> = 0 extends (1 & T) ? T :
							 | 
						||
| 
								 | 
							
								    T extends unknown[] ? RawDocType[] :
							 | 
						||
| 
								 | 
							
								    T extends Document ? RawDocType :
							 | 
						||
| 
								 | 
							
								    T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class QueryCursor<DocType> extends stream.Readable {
							 | 
						||
| 
								 | 
							
								    [Symbol.asyncIterator](): AsyncIterableIterator<DocType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Adds a [cursor flag](http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#addCursorFlag).
							 | 
						||
| 
								 | 
							
								     * Useful for setting the `noCursorTimeout` and `tailable` flags.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    addCursorFlag(flag: string, value: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Marks this cursor as closed. Will stop streaming and subsequent calls to
							 | 
						||
| 
								 | 
							
								     * `next()` will error.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    close(): Promise<void>;
							 | 
						||
| 
								 | 
							
								    close(callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Execute `fn` for every document(s) in the cursor. If batchSize is provided
							 | 
						||
| 
								 | 
							
								     * `fn` will be executed for each batch of documents. If `fn` returns a promise,
							 | 
						||
| 
								 | 
							
								     * will wait for the promise to resolve before iterating on to the next one.
							 | 
						||
| 
								 | 
							
								     * Returns a promise that resolves when done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: DocType) => any, options?: { parallel?: number }): Promise<void>;
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: DocType[]) => any, options: { parallel?: number, batchSize: number }): Promise<void>;
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: DocType) => any, options?: { parallel?: number, batchSize?: number }, cb?: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: DocType[]) => any, options: { parallel?: number, batchSize: number }, cb?: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Registers a transform function which subsequently maps documents retrieved
							 | 
						||
| 
								 | 
							
								     * via the streams interface or `.next()`
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    map<ResultType>(fn: (res: DocType) => ResultType): QueryCursor<ResultType>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Get the next document from this cursor. Will return `null` when there are
							 | 
						||
| 
								 | 
							
								     * no documents left.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    next(): Promise<DocType>;
							 | 
						||
| 
								 | 
							
								    next(callback: Callback<DocType | null>): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    options: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Aggregate<R> {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets an option on this aggregation. This function will be deprecated in a
							 | 
						||
| 
								 | 
							
								     * future release. */
							 | 
						||
| 
								 | 
							
								    addCursorFlag(flag: string, value: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Appends a new $addFields operator to this aggregate pipeline.
							 | 
						||
| 
								 | 
							
								     * Requires MongoDB v3.4+ to work
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    addFields(arg: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the allowDiskUse option for the aggregation query (ignored for < 2.6.0) */
							 | 
						||
| 
								 | 
							
								    allowDiskUse(value: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new operators to this aggregate pipeline */
							 | 
						||
| 
								 | 
							
								    append(...args: any[]): 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<R>['catch'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a collation. */
							 | 
						||
| 
								 | 
							
								    collation(options: mongodb.CollationDocument): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends a new $count operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    count(countName: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Sets the cursor option for the aggregation query (ignored for < 2.6.0).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    cursor(options?: Record<string, unknown>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Executes the aggregate pipeline on the currently bound Model. If cursor option is set, returns a cursor */
							 | 
						||
| 
								 | 
							
								    exec(callback?: Callback<R>): Promise<R> | any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Execute the aggregation with explain */
							 | 
						||
| 
								 | 
							
								    explain(callback?: Callback): Promise<any>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Combines multiple aggregation pipelines. */
							 | 
						||
| 
								 | 
							
								    facet(options: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new custom $graphLookup operator(s) to this aggregate pipeline, performing a recursive search on a collection. */
							 | 
						||
| 
								 | 
							
								    graphLookup(options: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new custom $group operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    group(arg: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the hint option for the aggregation query (ignored for < 3.6.0) */
							 | 
						||
| 
								 | 
							
								    hint(value: Record<string, unknown> | 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: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new custom $lookup operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    lookup(options: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Appends a new custom $match operator to this aggregate pipeline.
							 | 
						||
| 
								 | 
							
								     * @param arg $match operator contents
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    match(arg: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Binds this aggregate to a model.
							 | 
						||
| 
								 | 
							
								     * @param model the model to which the aggregate is to be bound
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    model(model: any): 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<string, any>; includeLocs?: string; num?: number; uniqueDocs?: boolean }): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Returns the current pipeline */
							 | 
						||
| 
								 | 
							
								    pipeline(): any[];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends a new $project operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    project(arg: string | Object): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the readPreference option for the aggregation query. */
							 | 
						||
| 
								 | 
							
								    read(pref: string | mongodb.ReadPreferenceMode, tags?: any[]): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets the readConcern level for the aggregation query. */
							 | 
						||
| 
								 | 
							
								    readConcern(level: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends a new $redact operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    redact(expression: any, thenExpr: string | any, elseExpr: string | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends a new $replaceRoot operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    replaceRoot(newRoot: object | string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Helper for [Atlas Text Search](https://docs.atlas.mongodb.com/reference/atlas-search/tutorial/)'s
							 | 
						||
| 
								 | 
							
								     * `$search` stage.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    search(options: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Lets you set arbitrary options, for middleware or plugins. */
							 | 
						||
| 
								 | 
							
								    option(value: Record<string, unknown>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new custom $sample operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    sample(size: number): 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: number): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends a new $sort operator to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    sort(arg: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Provides promise for aggregate. */
							 | 
						||
| 
								 | 
							
								    then: Promise<R>['then'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Appends a new $sortByCount operator to this aggregate pipeline. Accepts either a string field name
							 | 
						||
| 
								 | 
							
								     * or a pipeline object.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    sortByCount(arg: string | any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Appends new custom $unwind operator(s) to this aggregate pipeline. */
							 | 
						||
| 
								 | 
							
								    unwind(...args: any[]): this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class AggregationCursor extends stream.Readable {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Adds a [cursor flag](http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#addCursorFlag).
							 | 
						||
| 
								 | 
							
								     * Useful for setting the `noCursorTimeout` and `tailable` flags.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    addCursorFlag(flag: string, value: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Marks this cursor as closed. Will stop streaming and subsequent calls to
							 | 
						||
| 
								 | 
							
								     * `next()` will error.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    close(): Promise<void>;
							 | 
						||
| 
								 | 
							
								    close(callback: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Execute `fn` for every document(s) in the cursor. If batchSize is provided
							 | 
						||
| 
								 | 
							
								     * `fn` will be executed for each batch of documents. If `fn` returns a promise,
							 | 
						||
| 
								 | 
							
								     * will wait for the promise to resolve before iterating on to the next one.
							 | 
						||
| 
								 | 
							
								     * Returns a promise that resolves when done.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: any) => any, options?: { parallel?: number, batchSize?: number }): Promise<void>;
							 | 
						||
| 
								 | 
							
								    eachAsync(fn: (doc: any) => any, options?: { parallel?: number, batchSize?: number }, cb?: CallbackWithoutResult): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Registers a transform function which subsequently maps documents retrieved
							 | 
						||
| 
								 | 
							
								     * via the streams interface or `.next()`
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    map(fn: (res: any) => any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Get the next document from this cursor. Will return `null` when there are
							 | 
						||
| 
								 | 
							
								     * no documents left.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    next(): Promise<any>;
							 | 
						||
| 
								 | 
							
								    next(callback: Callback): void;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class SchemaType {
							 | 
						||
| 
								 | 
							
								    /** SchemaType constructor */
							 | 
						||
| 
								 | 
							
								    constructor(path: string, options?: any, instance?: string);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Get/set the function used to cast arbitrary values to this type. */
							 | 
						||
| 
								 | 
							
								    static cast(caster?: Function | boolean): Function;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static checkRequired(checkRequired?: (v: any) => boolean): (v: any) => boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets a default option for this schema type. */
							 | 
						||
| 
								 | 
							
								    static set(option: string, value: any): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Attaches a getter for all instances of this schema type. */
							 | 
						||
| 
								 | 
							
								    static get(getter: (value: any) => any): void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The class that Mongoose uses internally to instantiate this SchemaType's `options` property. */
							 | 
						||
| 
								 | 
							
								    OptionsConstructor: typeof SchemaTypeOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Cast `val` to this schema type. Each class that inherits from schema type should implement this function. */
							 | 
						||
| 
								 | 
							
								    cast(val: any, doc: Document<any>, init: boolean, prev?: any, options?: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets a default value for this SchemaType. */
							 | 
						||
| 
								 | 
							
								    default(val: any): any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a getter to this schematype. */
							 | 
						||
| 
								 | 
							
								    get(fn: Function): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Defines this path as immutable. Mongoose prevents you from changing
							 | 
						||
| 
								 | 
							
								     * immutable paths unless the parent document has [`isNew: true`](/docs/api.html#document_Document-isNew).
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    immutable(bool: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares the index options for this schematype. */
							 | 
						||
| 
								 | 
							
								    index(options: any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Set the model that this path refers to. This is the option that [populate](https://mongoosejs.com/docs/populate.html)
							 | 
						||
| 
								 | 
							
								     * looks at to determine the foreign collection it should query.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ref(ref: string | boolean | Model<any>): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Adds a required validator to this SchemaType. The validator gets added
							 | 
						||
| 
								 | 
							
								     * to the front of this SchemaType's validators array using unshift().
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    required(required: boolean, message?: string): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Sets default select() behavior for this path. */
							 | 
						||
| 
								 | 
							
								    select(val: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds a setter to this schematype. */
							 | 
						||
| 
								 | 
							
								    set(fn: Function): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares a sparse index. */
							 | 
						||
| 
								 | 
							
								    sparse(bool: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares a full text index. */
							 | 
						||
| 
								 | 
							
								    text(bool: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Defines a custom function for transforming this path when converting a document to JSON. */
							 | 
						||
| 
								 | 
							
								    transform(fn: (value: any) => any): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Declares an unique index. */
							 | 
						||
| 
								 | 
							
								    unique(bool: boolean): this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Adds validator(s) for this document path. */
							 | 
						||
| 
								 | 
							
								    validate(obj: RegExp | Function | any, errorMsg?: string,
							 | 
						||
| 
								 | 
							
								      type?: string): this;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type Callback<T = any> = (error: CallbackError, result: T) => void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type CallbackWithoutResult = (error: CallbackError) => void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class NativeError extends global.Error { }
							 | 
						||
| 
								 | 
							
								  type CallbackError = NativeError | null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class Error extends global.Error {
							 | 
						||
| 
								 | 
							
								    constructor(msg: string);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** The type of error. "MongooseError" for generic errors. */
							 | 
						||
| 
								 | 
							
								    name: string;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static messages: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static Messages: any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  namespace Error {
							 | 
						||
| 
								 | 
							
								    export class CastError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'CastError';
							 | 
						||
| 
								 | 
							
								      stringValue: string;
							 | 
						||
| 
								 | 
							
								      kind: string;
							 | 
						||
| 
								 | 
							
								      value: any;
							 | 
						||
| 
								 | 
							
								      path: string;
							 | 
						||
| 
								 | 
							
								      reason?: NativeError | null;
							 | 
						||
| 
								 | 
							
								      model?: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      constructor(type: string, value: any, path: string, reason?: NativeError, schemaType?: SchemaType);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class DisconnectedError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'DisconnectedError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class DivergentArrayError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'DivergentArrayError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class MissingSchemaError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'MissingSchemaError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class DocumentNotFoundError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'DocumentNotFoundError';
							 | 
						||
| 
								 | 
							
								      result: any;
							 | 
						||
| 
								 | 
							
								      numAffected: number;
							 | 
						||
| 
								 | 
							
								      filter: any;
							 | 
						||
| 
								 | 
							
								      query: any;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ObjectExpectedError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ObjectExpectedError';
							 | 
						||
| 
								 | 
							
								      path: string;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ObjectParameterError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ObjectParameterError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class OverwriteModelError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'OverwriteModelError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ParallelSaveError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ParallelSaveError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ParallelValidateError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ParallelValidateError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class MongooseServerSelectionError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'MongooseServerSelectionError';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class StrictModeError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'StrictModeError';
							 | 
						||
| 
								 | 
							
								      isImmutableError: boolean;
							 | 
						||
| 
								 | 
							
								      path: string;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ValidationError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ValidationError';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      errors: { [path: string]: ValidatorError | CastError | ValidationError };
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class ValidatorError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'ValidatorError';
							 | 
						||
| 
								 | 
							
								      properties: {
							 | 
						||
| 
								 | 
							
								        message: string,
							 | 
						||
| 
								 | 
							
								        type?: string,
							 | 
						||
| 
								 | 
							
								        path?: string,
							 | 
						||
| 
								 | 
							
								        value?: any,
							 | 
						||
| 
								 | 
							
								        reason?: any
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      kind: string;
							 | 
						||
| 
								 | 
							
								      path: string;
							 | 
						||
| 
								 | 
							
								      value: any;
							 | 
						||
| 
								 | 
							
								      reason?: Error | null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export class VersionError extends Error {
							 | 
						||
| 
								 | 
							
								      name: 'VersionError';
							 | 
						||
| 
								 | 
							
								      version: number;
							 | 
						||
| 
								 | 
							
								      modifiedPaths: Array<string>;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Deprecated types for backwards compatibility. */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Alias for QueryOptions for backwards compatibility. */
							 | 
						||
| 
								 | 
							
								  type ModelUpdateOptions = QueryOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  type DocumentQuery<ResultType, DocType extends Document, THelpers = {}> = Query<ResultType, DocType, THelpers>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Backwards support for DefinitelyTyped */
							 | 
						||
| 
								 | 
							
								  interface HookSyncCallback<T> {
							 | 
						||
| 
								 | 
							
								    (this: T, next: HookNextFunction, docs: any[]): Promise<any> | void;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface HookAsyncCallback<T> {
							 | 
						||
| 
								 | 
							
								    (this: T, next: HookNextFunction, done: HookDoneFunction, docs: any[]): Promise<any> | void;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface HookErrorCallback {
							 | 
						||
| 
								 | 
							
								    (error?: Error): any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface HookNextFunction {
							 | 
						||
| 
								 | 
							
								    (error?: Error): any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  interface HookDoneFunction {
							 | 
						||
| 
								 | 
							
								    (error?: Error): any;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  export type SchemaTypeOpts<T> = SchemaTypeOptions<T>;
							 | 
						||
| 
								 | 
							
								  export type ConnectionOptions = ConnectOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /* for ts-mongoose */
							 | 
						||
| 
								 | 
							
								  class mquery {}
							 | 
						||
| 
								 | 
							
								}
							 |