// Type definitions for MongoDB 3.5 // Project: https://github.com/mongodb/node-mongodb-native // https://github.com/mongodb/node-mongodb-native/tree/3.1 // Definitions by: Federico Caselli // Alan Marcell // Jason Dreyzehner // Gaurav Lahoti // Mariano Cortesi // Enrico Picci // Alexander Christie // Julien Chaumond // Dan Aprahamian // Denys Bushulyak // Bastien Arata // Wan Bachtiar // Geraldine Lemeur // Jimmy Shimizu // Dominik Heigl // Angela-1 // Mikael Lirbank // Hector Ribes // Florian Richter // Erik Christensen // Nick Zahn // Jarom Loveridge // Luis Pais // Hossein Saniei // Alberto Silva // Rauno Viskus // Piotr Błażejewicz // Linus Unnebäck // Richard Bateman // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 3.0 // Documentation: https://mongodb.github.io/node-mongodb-native/3.1/api/ /// import { Binary, ObjectId, Timestamp } from 'bson'; import { EventEmitter } from 'events'; import { Readable, Writable } from 'stream'; import { checkServerIdentity } from 'tls'; // We can use TypeScript Omit once minimum required TypeScript Version is above 3.5 type Omit = Pick>; export function connect(uri: string, options?: MongoClientOptions): Promise; export function connect(uri: string, callback: MongoCallback): void; export function connect(uri: string, options: MongoClientOptions, callback: MongoCallback): void; export { Binary, DBRef, Decimal128, Double, Int32, Long, MaxKey, MinKey, ObjectID, ObjectId, Timestamp } from 'bson'; // Class documentation : http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html export class MongoClient extends EventEmitter { constructor(uri: string, options?: MongoClientOptions); /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#.connect */ static connect(uri: string, callback: MongoCallback): void; static connect(uri: string, options?: MongoClientOptions): Promise; static connect(uri: string, options: MongoClientOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#connect */ connect(): Promise; connect(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#close */ close(callback: MongoCallback): void; close(force?: boolean): Promise; close(force: boolean, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#db */ db(dbName?: string, options?: MongoClientCommonOption): Db; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#isConnected */ isConnected(options?: MongoClientCommonOption): boolean; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#logout */ logout(callback: MongoCallback): void; logout(options?: { dbName?: string }): Promise; logout(options: { dbName?: string }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#startSession */ startSession(options?: SessionOptions): ClientSession; /** http://mongodb.github.io/node-mongodb-native/3.3/api/MongoClient.html#watch */ watch(pipeline?: object[], options?: ChangeStreamOptions & { session?: ClientSession }): ChangeStream; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#withSession */ withSession(operation: (session: ClientSession) => Promise): Promise; /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#withSession */ withSession(options: SessionOptions, operation: (session: ClientSession) => Promise): Promise; } /** * http://mongodb.github.io/node-mongodb-native/3.1/api/ClientSession.html */ export interface ClientSession extends EventEmitter { /** The server id associated with this session */ id: any; /** * Aborts the currently active transaction in this session. * @param cb Optional callback for completion of this operation */ abortTransaction(cb?: MongoCallback): Promise; /** * Advances the operationTime for a ClientSession. */ advanceOperationTime(operamtionTime: Timestamp): void; /** * Commits the currently active transaction in this session. * @param cb Optional callback for completion of this operation */ commitTransaction(cb?: MongoCallback): Promise; /** * Ends this session on the server * @param cb Optional callback for completion of this operation */ endSession(cb?: MongoCallback): void; /** * Ends this session on the server * @param options Optional settings. Currently reserved for future use * @param cb Optional callback for completion of this operation */ endSession(options: any, cb?: MongoCallback): void; /** * Used to determine if this session equals another * * @param session A class representing a client session on the server * @returns Whether the sessions are equal */ equals(session: ClientSession): boolean; /** Increment the transaction number on the internal ServerSession */ incrementTransactionNumber(): void; /** * @returns Whether this session is currently in a transaction or not */ inTransaction(): boolean; /** * Starts a new transaction with the given options. */ startTransaction(options?: TransactionOptions): void; /** * Runs a provided lambda within a transaction, retrying either the commit operation * or entire transaction as needed (and when the error permits) to better ensure that * the transaction can complete successfully. * * IMPORTANT: This method requires the user to return a Promise, all lambdas that do not * return a Promise will result in undefined behavior. * * @param fn Function to execute with the new session. * @param options Optional settings for the transaction */ withTransaction(fn: WithTransactionCallback, options?: TransactionOptions): Promise; } // http://mongodb.github.io/node-mongodb-native/3.1/api/global.html#ReadConcern type ReadConcernLevel = 'local' | 'available' | 'majority' | 'linearizable' | 'snapshot'; /** * The MongoDB ReadConcern, which allows for control of the consistency and isolation properties * of the data read from replica sets and replica set shards. * http://mongodb.github.io/node-mongodb-native/3.1/api/global.html#ReadConcern */ export interface ReadConcern { level: ReadConcernLevel; } /** * A MongoDB WriteConcern, which describes the level of acknowledgement * requested from MongoDB for write operations. * http://mongodb.github.io/node-mongodb-native/3.1/api/global.html#WriteConcern */ interface WriteConcern { /** * requests acknowledgement that the write operation has * propagated to a specified number of mongod hosts * @default 1 */ w?: number | 'majority' | string; /** * requests acknowledgement from MongoDB that the write operation has * been written to the journal * @default false */ j?: boolean; /** * a time limit, in milliseconds, for the write concern */ wtimeout?: number; } /** * Options to pass when creating a Client Session * http://mongodb.github.io/node-mongodb-native/3.1/api/global.html#SessionOptions */ export interface SessionOptions { /** * Whether causal consistency should be enabled on this session * @default true */ causalConsistency?: boolean; /** * The default TransactionOptions to use for transactions started on this session. */ defaultTransactionOptions?: TransactionOptions; } /** * Configuration options for a transaction. * http://mongodb.github.io/node-mongodb-native/3.1/api/global.html#TransactionOptions */ export interface TransactionOptions { readConcern?: ReadConcern; writeConcern?: WriteConcern; readPreference?: ReadPreferenceOrMode; } export interface MongoClientCommonOption { /** Do not make the db an event listener to the original connection. */ noListener?: boolean; /** Control if you want to return a cached instance or have a new one created */ returnNonCachedInstance?: boolean; } export interface MongoCallback { (error: MongoError, result: T): void; } export type WithTransactionCallback = (session: ClientSession) => Promise; /** * Creates a new MongoError * see {@link http://mongodb.github.io/node-mongodb-native/3.5/api/MongoError.html} */ export class MongoError extends Error { constructor(message: string | Error | object); /** * @deprecated */ static create(options: string | Error | object): MongoError; /** * Checks the error to see if it has an error label */ hasErrorLabel(label: string): boolean; code?: number; /** * While not documented, the 'errmsg' prop is AFAIK the only way to find out * which unique index caused a duplicate key error. When you have multiple * unique indexes on a collection, knowing which index caused a duplicate * key error enables you to send better (more precise) error messages to the * client/user (eg. "Email address must be unique" instead of "Both email * address and username must be unique") - which caters for a better (app) * user experience. * * Details: https://github.com/Automattic/mongoose/issues/2129 (issue for * mongoose, but the same applies for the native mongodb driver) * * Note that in mongoose (the link above) the prop in question is called * 'message' while in mongodb it is called 'errmsg'. This can be seen in * multiple places in the source code, for example here: * https://github.com/mongodb/node-mongodb-native/blob/a12aa15ac3eaae3ad5c4166ea1423aec4560f155/test/functional/find_tests.js#L1111 */ errmsg?: string; name: string; } /** * An error indicating an issue with the network, including TCP errors and timeouts * see {@link https://mongodb.github.io/node-mongodb-native/3.5/api/MongoNetworkError.html} */ export class MongoNetworkError extends MongoError { constructor(message: string); errorLabels: string[]; } /** * An error used when attempting to parse a value (like a connection string) * see {@link https://mongodb.github.io/node-mongodb-native/3.5/api/MongoParseError.html} */ export class MongoParseError extends MongoError { constructor(message: string); } /** http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#.connect */ export interface MongoClientOptions extends DbCreateOptions, ServerOptions, MongosOptions, ReplSetOptions, SocketOptions, SSLOptions, TLSOptions, HighAvailabilityOptions, WriteConcern { /** * The logging level (error/warn/info/debug) */ loggerLevel?: string; /** * Custom logger object */ logger?: object | log; /** * Validate MongoClient passed in options for correctness. * Default: false */ validateOptions?: object | boolean; /** * The name of the application that created this MongoClient instance. */ appname?: string; /** * Authentication credentials */ auth?: { /** * The username for auth */ user: string; /** * The password for auth */ password: string; }; /** * Determines whether or not to use the new url parser. Enables the new, spec-compliant * url parser shipped in the core driver. This url parser fixes a number of problems with * the original parser, and aims to outright replace that parser in the near future. */ useNewUrlParser?: boolean; /** * Enables the new unified topology layer */ useUnifiedTopology?: boolean; /** * With `useUnifiedTopology`, the MongoDB driver will try to find a server to send any given operation to * and keep retrying for `serverSelectionTimeoutMS` milliseconds. * Default: 30000 */ serverSelectionTimeoutMS?: number; /** * number of retries for a tailable cursor * @default 5 */ numberOfRetries?: number; /** * Mechanism for authentication: DEFAULT, GSSAPI, PLAIN, MONGODB-X509, 'MONGODB-CR', SCRAM-SHA-1 or SCRAM-SHA-256 */ authMechanism?: 'DEFAULT' | 'GSSAPI' | 'PLAIN' | 'MONGODB-X509' | 'MONGODB-CR' | 'SCRAM-SHA-1' | 'SCRAM-SHA-256' | string; } export interface SSLOptions { /** * Passed directly through to tls.createSecureContext. See https://nodejs.org/dist/latest-v9.x/docs/api/tls.html#tls_tls_createsecurecontext_options for more info. */ ciphers?: string; /** * Passed directly through to tls.createSecureContext. See https://nodejs.org/dist/latest-v9.x/docs/api/tls.html#tls_tls_createsecurecontext_options for more info. */ ecdhCurve?: string; /** * Default:5; Number of connections for each server instance; set to 5 as default for legacy reasons. */ poolSize?: number; /** * If present, the connection pool will be initialized with minSize connections, and will never dip below minSize connections */ minSize?: number; /** * Use ssl connection (needs to have a mongod server with ssl support) */ ssl?: boolean; /** * Default: true; Validate mongod server certificate against ca (mongod server >=2.4 with ssl support required) */ sslValidate?: boolean; /** * Default: true; Server identity checking during SSL */ checkServerIdentity?: boolean | typeof checkServerIdentity; /** * Array of valid certificates either as Buffers or Strings */ sslCA?: ReadonlyArray; /** * SSL Certificate revocation list binary buffer */ sslCRL?: ReadonlyArray; /** * SSL Certificate binary buffer */ sslCert?: Buffer | string; /** * SSL Key file binary buffer */ sslKey?: Buffer | string; /** * SSL Certificate pass phrase */ sslPass?: Buffer | string; /** * String containing the server name requested via TLS SNI. */ servername?: string; } export interface TLSOptions { /** * Enable TLS connections * @default false */ tls?: boolean; /** * Relax TLS constraints, disabling validation * @default false */ tlsInsecure?: boolean; /** * path to file with either a single or bundle of certificate authorities * to be considered trusted when making a TLS connection */ tlsCAFile?: string; /** * path to the client certificate file or the client private key file; * in the case that they both are needed, the files should be concatenated */ tlsCertificateKeyFile?: string; /** * The password to decrypt the client private key to be used for TLS connections */ tlsCertificateKeyFilePassword?: string; /** * Specifies whether or not the driver should error when the server’s TLS certificate is invalid */ tlsAllowInvalidCertificates?: boolean; /** * Specifies whether or not the driver should error when there is a mismatch between the server’s hostname * and the hostname specified by the TLS certificate */ tlsAllowInvalidHostnames?: boolean; } export interface HighAvailabilityOptions { /** * Default: true; Turn on high availability monitoring. */ ha?: boolean; /** * Default: 10000; The High availability period for replicaset inquiry */ haInterval?: number; /** * Default: false; */ domainsEnabled?: boolean; /** The ReadPreference mode as listed here: http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html */ readPreference?: ReadPreferenceOrMode; /** An object representing read preference tags, see: http://mongodb.github.io/node-mongodb-native/3.1/api/ReadPreference.html */ readPreferenceTags?: string[]; } export type ReadPreferenceMode = 'primary' | 'primaryPreferred' | 'secondary' | 'secondaryPreferred' | 'nearest'; export type ReadPreferenceOrMode = ReadPreference | ReadPreferenceMode; // See http://mongodb.github.io/node-mongodb-native/3.1/api/ReadPreference.html export class ReadPreference { constructor(mode: ReadPreferenceMode, tags: object); mode: ReadPreferenceMode; tags: any; options: { /** * Max Secondary Read Staleness in Seconds */ maxStalenessSeconds?: number; }; static PRIMARY: 'primary'; static PRIMARY_PREFERRED: 'primaryPreferred'; static SECONDARY: 'secondary'; static SECONDARY_PREFERRED: 'secondaryPreferred'; static NEAREST: 'nearest'; isValid(mode: string): boolean; static isValid(mode: string): boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html */ export interface DbCreateOptions extends CommonOptions { /** * If the database authentication is dependent on another databaseName. */ authSource?: string; /** * Default: false; Force server to create _id fields instead of client. */ forceServerObjectId?: boolean; /** * Default: false; Use c++ bson parser. */ native_parser?: boolean; /** * Serialize functions on any object. */ serializeFunctions?: boolean; /** * Specify if the BSON serializer should ignore undefined fields. */ ignoreUndefined?: boolean; /** * Return document results as raw BSON buffers. */ raw?: boolean; /** * Default: true; Promotes Long values to number if they fit inside the 53 bits resolution. */ promoteLongs?: boolean; /** * Default: false; Promotes Binary BSON values to native Node Buffers */ promoteBuffers?: boolean; /** * the prefered read preference. use 'ReadPreference' class. */ readPreference?: ReadPreferenceOrMode; /** * Default: true; Promotes BSON values to native types where possible, set to false to only receive wrapper types. */ promoteValues?: boolean; /** * Custom primary key factory to generate _id values (see Custom primary keys). */ pkFactory?: object; /** * ES6 compatible promise constructor */ promiseLibrary?: PromiseConstructor; /** * https://docs.mongodb.com/manual/reference/read-concern/#read-concern */ readConcern?: ReadConcern | string; /** * Sets a cap on how many operations the driver will buffer up before giving up on getting a * working connection, default is -1 which is unlimited. */ bufferMaxEntries?: number; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Server.html */ export interface SocketOptions { /** * Reconnect on error. default:false */ autoReconnect?: boolean; /** * TCP Socket NoDelay option. default:true */ noDelay?: boolean; /** * TCP KeepAlive enabled on the socket. default:true */ keepAlive?: boolean; /** * TCP KeepAlive initial delay before sending first keep-alive packet when idle. default:300000 */ keepAliveInitialDelay?: number; /** * TCP Connection timeout setting. default 0 */ connectTimeoutMS?: number; /** * Version of IP stack. Can be 4, 6 or null. default: null. * * If null, will attempt to connect with IPv6, and will fall back to IPv4 on failure * refer to http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html */ family?: 4 | 6 | null; /** * TCP Socket timeout setting. default 0 */ socketTimeoutMS?: number; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Server.html */ export interface ServerOptions extends SSLOptions { /** * If you're connected to a single server or mongos proxy (as opposed to a replica set), * the MongoDB driver will try to reconnect every reconnectInterval milliseconds for reconnectTries * times, and give up afterward. When the driver gives up, the mongoose connection emits a * reconnectFailed event. * @default 30 */ reconnectTries?: number; /** * Will wait # milliseconds between retries * @default 1000 */ reconnectInterval?: number; /** * @default true */ monitoring?: boolean; /** * Enable command monitoring for this client * @default false */ monitorCommands?: boolean; /** * Socket Options */ socketOptions?: SocketOptions; /** * The High availability period for replicaset inquiry * @default 10000 */ haInterval?: number; /** * @default false */ domainsEnabled?: boolean; /** * Specify a file sync write concern * @default false */ fsync?: boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Mongos.html */ export interface MongosOptions extends SSLOptions, HighAvailabilityOptions { /** * Default: 15; Cutoff latency point in MS for MongoS proxy selection */ acceptableLatencyMS?: number; /** * Socket Options */ socketOptions?: SocketOptions; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/ReplSet.html */ export interface ReplSetOptions extends SSLOptions, HighAvailabilityOptions { /** * The max staleness to secondary reads (values under 10 seconds cannot be guaranteed); */ maxStalenessSeconds?: number; /** * The name of the replicaset to connect to. */ replicaSet?: string; /** * Default: 15 ; Range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms) */ secondaryAcceptableLatencyMS?: number; connectWithNoPrimary?: boolean; socketOptions?: SocketOptions; } export type ProfilingLevel = 'off' | 'slow_only' | 'all'; // Class documentation : http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html export class Db extends EventEmitter { constructor(databaseName: string, serverConfig: Server | ReplSet | Mongos, options?: DbCreateOptions); serverConfig: Server | ReplSet | Mongos; bufferMaxEntries: number; databaseName: string; options: any; native_parser: boolean; slaveOk: boolean; writeConcern: WriteConcern; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#addUser */ addUser(username: string, password: string, callback: MongoCallback): void; addUser(username: string, password: string, options?: DbAddUserOptions): Promise; addUser(username: string, password: string, options: DbAddUserOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#admin */ admin(): Admin; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#collection */ collection(name: string, callback?: MongoCallback>): Collection; collection(name: string, options: DbCollectionOptions, callback?: MongoCallback>): Collection; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#collections */ collections(): Promise>>; collections(callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#command */ command(command: object, callback: MongoCallback): void; command(command: object, options?: { readPreference: ReadPreferenceOrMode, session?: ClientSession }): Promise; command(command: object, options: { readPreference: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#createCollection */ createCollection(name: string, callback: MongoCallback>): void; createCollection(name: string, options?: CollectionCreateOptions): Promise>; createCollection(name: string, options: CollectionCreateOptions, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#createIndex */ createIndex(name: string, fieldOrSpec: string | object, callback: MongoCallback): void; createIndex(name: string, fieldOrSpec: string | object, options?: IndexOptions): Promise; createIndex(name: string, fieldOrSpec: string | object, options: IndexOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#dropCollection */ dropCollection(name: string): Promise; dropCollection(name: string, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#dropDatabase */ dropDatabase(): Promise; dropDatabase(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#executeDbAdminCommand */ executeDbAdminCommand(command: object, callback: MongoCallback): void; executeDbAdminCommand(command: object, options?: { readPreference?: ReadPreferenceOrMode, session?: ClientSession }): Promise; executeDbAdminCommand(command: object, options: { readPreference?: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#indexInformation */ indexInformation(name: string, callback: MongoCallback): void; indexInformation(name: string, options?: { full?: boolean, readPreference?: ReadPreferenceOrMode }): Promise; indexInformation(name: string, options: { full?: boolean, readPreference?: ReadPreferenceOrMode }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#listCollections */ listCollections(filter?: object, options?: { nameOnly?: boolean, batchSize?: number, readPreference?: ReadPreferenceOrMode, session?: ClientSession }): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#profilingInfo */ /** @deprecated Query the system.profile collection directly. */ profilingInfo(callback: MongoCallback): void; profilingInfo(options?: { session?: ClientSession }): Promise; profilingInfo(options: { session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#profilingLevel */ profilingLevel(callback: MongoCallback): void; profilingLevel(options?: { session?: ClientSession }): Promise; profilingLevel(options: { session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#removeUser */ removeUser(username: string, callback: MongoCallback): void; removeUser(username: string, options?: CommonOptions): Promise; removeUser(username: string, options: CommonOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#renameCollection */ renameCollection(fromCollection: string, toCollection: string, callback: MongoCallback>): void; renameCollection(fromCollection: string, toCollection: string, options?: { dropTarget?: boolean }): Promise>; renameCollection(fromCollection: string, toCollection: string, options: { dropTarget?: boolean }, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#setProfilingLevel */ setProfilingLevel(level: ProfilingLevel, callback: MongoCallback): void; setProfilingLevel(level: ProfilingLevel, options?: { session?: ClientSession }): Promise; setProfilingLevel(level: ProfilingLevel, options: { session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#stats */ stats(callback: MongoCallback): void; stats(options?: { scale?: number }): Promise; stats(options: { scale?: number }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.3/api/Db.html#watch */ watch(pipeline?: object[], options?: ChangeStreamOptions & { session?: ClientSession }): ChangeStream; } export interface CommonOptions extends WriteConcern { session?: ClientSession; } /** * @deprecated * @see http://mongodb.github.io/node-mongodb-native/3.1/api/Server.html */ export class Server extends EventEmitter { constructor(host: string, port: number, options?: ServerOptions); connections(): any[]; } /** * @deprecated * @see http://mongodb.github.io/node-mongodb-native/3.1/api/ReplSet.html */ export class ReplSet extends EventEmitter { constructor(servers: Server[], options?: ReplSetOptions); connections(): any[]; } /** * @deprecated * @see http://mongodb.github.io/node-mongodb-native/3.1/api/Mongos.html */ export class Mongos extends EventEmitter { constructor(servers: Server[], options?: MongosOptions); connections(): any[]; } /** * @deprecated * @see http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#addUser */ export interface DbAddUserOptions extends CommonOptions { customData?: object; roles?: object[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#createCollection */ export interface CollectionCreateOptions extends CommonOptions { raw?: boolean; pkFactory?: object; readPreference?: ReadPreferenceOrMode; serializeFunctions?: boolean; strict?: boolean; capped?: boolean; autoIndexId?: boolean; size?: number; max?: number; flags?: number; storageEngine?: object; validator?: object; validationLevel?: "off" | "strict" | "moderate"; validationAction?: "error" | "warn"; indexOptionDefaults?: object; viewOn?: string; pipeline?: any[]; collation?: CollationDocument; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#collection */ export interface DbCollectionOptions extends CommonOptions { raw?: boolean; pkFactory?: object; readPreference?: ReadPreferenceOrMode; serializeFunctions?: boolean; strict?: boolean; readConcern?: ReadConcern; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Db.html#createIndex */ export interface IndexOptions extends CommonOptions { /** * Creates an unique index. */ unique?: boolean; /** * Creates a sparse index. */ sparse?: boolean; /** * Creates the index in the background, yielding whenever possible. */ background?: boolean; /** * A unique index cannot be created on a key that has pre-existing duplicate values. * * If you would like to create the index anyway, keeping the first document the database indexes and * deleting all subsequent documents that have duplicate value */ dropDups?: boolean; /** * For geo spatial indexes set the lower bound for the co-ordinates. */ min?: number; /** * For geo spatial indexes set the high bound for the co-ordinates. */ max?: number; /** * Specify the format version of the indexes. */ v?: number; /** * Allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) */ expireAfterSeconds?: number; /** * Override the auto generated index name (useful if the resulting name is larger than 128 bytes) */ name?: string; /** * Creates a partial index based on the given filter object (MongoDB 3.2 or higher) */ partialFilterExpression?: any; collation?: CollationDocument; default_language?: string; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html */ export interface Admin { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#addUser */ addUser(username: string, password: string, callback: MongoCallback): void; addUser(username: string, password: string, options?: AddUserOptions): Promise; addUser(username: string, password: string, options: AddUserOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#buildInfo */ buildInfo(options?: { session?: ClientSession }): Promise; buildInfo(options: { session?: ClientSession }, callback: MongoCallback): void; buildInfo(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#command */ command(command: object, callback: MongoCallback): void; command(command: object, options?: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number }): Promise; command(command: object, options: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#listDatabases */ listDatabases(options?: { nameOnly?: boolean, session?: ClientSession }): Promise; listDatabases(options: { nameOnly?: boolean, session?: ClientSession }, callback: MongoCallback): void; listDatabases(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#ping */ ping(options?: { session?: ClientSession }): Promise; ping(options: { session?: ClientSession }, callback: MongoCallback): void; ping(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#removeUser */ removeUser(username: string, callback: MongoCallback): void; removeUser(username: string, options?: FSyncOptions): Promise; removeUser(username: string, options: FSyncOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#replSetGetStatus */ replSetGetStatus(options?: { session?: ClientSession }): Promise; replSetGetStatus(options: { session?: ClientSession }, callback: MongoCallback): void; replSetGetStatus(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#serverInfo */ serverInfo(): Promise; serverInfo(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#serverStatus */ serverStatus(options?: { session?: ClientSession }): Promise; serverStatus(options: { session?: ClientSession }, callback: MongoCallback): void; serverStatus(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#validateCollection */ validateCollection(collectionNme: string, callback: MongoCallback): void; validateCollection(collectionNme: string, options?: object): Promise; validateCollection(collectionNme: string, options: object, callback: MongoCallback): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#addUser */ export interface AddUserOptions extends CommonOptions { fsync: boolean; customData?: object; roles?: object[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Admin.html#removeUser */ export interface FSyncOptions extends CommonOptions { fsync?: boolean; } // TypeScript Omit (Exclude to be specific) does not work for objects with an "any" indexed type type EnhancedOmit = string | number extends keyof T ? T : // T has indexed type e.g. { _id: string; [k: string]: any; } or it is "any" Omit; type ExtractIdType = TSchema extends { _id: infer U } // user has defined a type for _id ? {} extends U ? Exclude : unknown extends U ? ObjectId : U : ObjectId; // user has not defined _id on schema // this makes _id optional type OptionalId = ObjectId extends TSchema['_id'] // a Schema with ObjectId _id type or "any" or "indexed type" provided ? EnhancedOmit & { _id?: ExtractIdType } // a Schema provided but _id type is not ObjectId : WithId; // this adds _id as a required property type WithId = EnhancedOmit & { _id: ExtractIdType }; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html */ export interface Collection { /** * Get the collection name. */ collectionName: string; /** * Get the full collection namespace. */ namespace: string; /** * The current write concern values. */ writeConcern: WriteConcern; /** * The current read concern values. */ readConcern: ReadConcern; /** * Get current index hint for collection. */ hint: any; /** http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#aggregate */ aggregate(callback: MongoCallback>): AggregationCursor; aggregate(pipeline: object[], callback: MongoCallback>): AggregationCursor; aggregate(pipeline?: object[], options?: CollectionAggregationOptions, callback?: MongoCallback>): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#bulkWrite */ bulkWrite(operations: object[], callback: MongoCallback): void; bulkWrite(operations: object[], options?: CollectionBulkWriteOptions): Promise; bulkWrite(operations: object[], options: CollectionBulkWriteOptions, callback: MongoCallback): void; /** * http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#count * @deprecated Use countDocuments or estimatedDocumentCount */ count(callback: MongoCallback): void; count(query: FilterQuery, callback: MongoCallback): void; count(query?: FilterQuery, options?: MongoCountPreferences): Promise; count(query: FilterQuery, options: MongoCountPreferences, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#countDocuments */ countDocuments(callback: MongoCallback): void; countDocuments(query: FilterQuery, callback: MongoCallback): void; countDocuments(query?: FilterQuery, options?: MongoCountPreferences): Promise; countDocuments(query: FilterQuery, options: MongoCountPreferences, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#createIndex */ createIndex(fieldOrSpec: string | any, callback: MongoCallback): void; createIndex(fieldOrSpec: string | any, options?: IndexOptions): Promise; createIndex(fieldOrSpec: string | any, options: IndexOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#createIndexes and http://docs.mongodb.org/manual/reference/command/createIndexes/ */ createIndexes(indexSpecs: IndexSpecification[], callback: MongoCallback): void; createIndexes(indexSpecs: IndexSpecification[], options?: { session?: ClientSession }): Promise; createIndexes(indexSpecs: IndexSpecification[], options: { session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#deleteMany */ deleteMany(filter: FilterQuery, callback: MongoCallback): void; deleteMany(filter: FilterQuery, options?: CommonOptions): Promise; deleteMany(filter: FilterQuery, options: CommonOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#deleteOne */ deleteOne(filter: FilterQuery, callback: MongoCallback): void; deleteOne(filter: FilterQuery, options?: CommonOptions & { bypassDocumentValidation?: boolean }): Promise; deleteOne(filter: FilterQuery, options: CommonOptions & { bypassDocumentValidation?: boolean }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#distinct */ distinct(key: string, callback: MongoCallback): void; distinct(key: string, query: FilterQuery, callback: MongoCallback): void; distinct(key: string, query?: FilterQuery, options?: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number, session?: ClientSession }): Promise; distinct(key: string, query: FilterQuery, options: { readPreference?: ReadPreferenceOrMode, maxTimeMS?: number, session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#drop */ drop(options?: { session: ClientSession }): Promise; drop(callback: MongoCallback): void; drop(options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#dropIndex */ dropIndex(indexName: string, callback: MongoCallback): void; dropIndex(indexName: string, options?: CommonOptions & { maxTimeMS?: number }): Promise; dropIndex(indexName: string, options: CommonOptions & { maxTimeMS?: number }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#dropIndexes */ dropIndexes(options?: { session?: ClientSession, maxTimeMS?: number }): Promise; dropIndexes(callback?: MongoCallback): void; dropIndexes(options: { session?: ClientSession, maxTimeMS?: number }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#estimatedDocumentCount */ estimatedDocumentCount(callback: MongoCallback): void; estimatedDocumentCount(query: FilterQuery, callback: MongoCallback): void; estimatedDocumentCount(query?: FilterQuery, options?: MongoCountPreferences): Promise; estimatedDocumentCount(query: FilterQuery, options: MongoCountPreferences, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#find */ find(query?: FilterQuery): Cursor; find(query: FilterQuery, options?: FindOneOptions): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOne */ findOne(filter: FilterQuery, callback: MongoCallback): void; findOne(filter: FilterQuery, options?: FindOneOptions): Promise; findOne(filter: FilterQuery, options: FindOneOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndDelete */ findOneAndDelete(filter: FilterQuery, callback: MongoCallback>): void; findOneAndDelete(filter: FilterQuery, options?: FindOneAndDeleteOption): Promise>; findOneAndDelete(filter: FilterQuery, options: FindOneAndDeleteOption, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndReplace */ findOneAndReplace(filter: FilterQuery, replacement: object, callback: MongoCallback>): void; findOneAndReplace(filter: FilterQuery, replacement: object, options?: FindOneAndReplaceOption): Promise>; findOneAndReplace(filter: FilterQuery, replacement: object, options: FindOneAndReplaceOption, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndUpdate */ findOneAndUpdate(filter: FilterQuery, update: UpdateQuery | TSchema, callback: MongoCallback>): void; findOneAndUpdate(filter: FilterQuery, update: UpdateQuery | TSchema, options?: FindOneAndUpdateOption): Promise>; findOneAndUpdate(filter: FilterQuery, update: UpdateQuery | TSchema, options: FindOneAndUpdateOption, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#geoHaystackSearch */ geoHaystackSearch(x: number, y: number, callback: MongoCallback): void; geoHaystackSearch(x: number, y: number, options?: GeoHaystackSearchOptions): Promise; geoHaystackSearch(x: number, y: number, options: GeoHaystackSearchOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#group */ /** @deprecated MongoDB 3.6 or higher no longer supports the group command. We recommend rewriting using the aggregation framework. */ group(keys: object | any[] | Function | Code, condition: object, initial: object, reduce: Function | Code, finalize: Function | Code, command: boolean, callback: MongoCallback): void; /** @deprecated MongoDB 3.6 or higher no longer supports the group command. We recommend rewriting using the aggregation framework. */ group( keys: object | any[] | Function | Code, condition: object, initial: object, reduce: Function | Code, finalize: Function | Code, command: boolean, options?: { readPreference?: ReadPreferenceOrMode, session?: ClientSession } ): Promise; /** @deprecated MongoDB 3.6 or higher no longer supports the group command. We recommend rewriting using the aggregation framework. */ group( keys: object | any[] | Function | Code, condition: object, initial: object, reduce: Function | Code, finalize: Function | Code, command: boolean, options: { readPreference?: ReadPreferenceOrMode, session?: ClientSession }, callback: MongoCallback ): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#indexes */ indexes(options?: { session: ClientSession }): Promise; indexes(callback: MongoCallback): void; indexes(options: { session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#indexExists */ indexExists(indexes: string | string[], callback: MongoCallback): void; indexExists(indexes: string | string[], options?: { session: ClientSession }): Promise; indexExists(indexes: string | string[], options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#indexInformation */ indexInformation(callback: MongoCallback): void; indexInformation(options?: { full: boolean, session: ClientSession }): Promise; indexInformation(options: { full: boolean, session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#initializeOrderedBulkOp */ initializeOrderedBulkOp(options?: CommonOptions): OrderedBulkOperation; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#initializeUnorderedBulkOp */ initializeUnorderedBulkOp(options?: CommonOptions): UnorderedBulkOperation; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertOne */ /** @deprecated Use insertOne, insertMany or bulkWrite */ insert(docs: OptionalId, callback: MongoCallback>>): void; /** @deprecated Use insertOne, insertMany or bulkWrite */ insert(docs: OptionalId, options?: CollectionInsertOneOptions): Promise>>; /** @deprecated Use insertOne, insertMany or bulkWrite */ insert(docs: OptionalId, options: CollectionInsertOneOptions, callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertMany */ insertMany(docs: Array>, callback: MongoCallback>>): void; insertMany(docs: Array>, options?: CollectionInsertManyOptions): Promise>>; insertMany(docs: Array>, options: CollectionInsertManyOptions, callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertOne */ insertOne(docs: OptionalId, callback: MongoCallback>>): void; insertOne(docs: OptionalId, options?: CollectionInsertOneOptions): Promise>>; insertOne(docs: OptionalId, options: CollectionInsertOneOptions, callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#isCapped */ isCapped(options?: { session: ClientSession }): Promise; isCapped(callback: MongoCallback): void; isCapped(options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#listIndexes */ listIndexes(options?: { batchSize?: number, readPreference?: ReadPreferenceOrMode, session?: ClientSession }): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#mapReduce */ mapReduce(map: CollectionMapFunction | string, reduce: CollectionReduceFunction | string, callback: MongoCallback): void; mapReduce(map: CollectionMapFunction | string, reduce: CollectionReduceFunction | string, options?: MapReduceOptions): Promise; mapReduce(map: CollectionMapFunction | string, reduce: CollectionReduceFunction | string, options: MapReduceOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#options */ options(options?: { session: ClientSession }): Promise; options(callback: MongoCallback): void; options(options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#parallelCollectionScan */ parallelCollectionScan(callback: MongoCallback>>): void; parallelCollectionScan(options?: ParallelCollectionScanOptions): Promise>>; parallelCollectionScan(options: ParallelCollectionScanOptions, callback: MongoCallback>>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#reIndex */ reIndex(options?: { session: ClientSession }): Promise; reIndex(callback: MongoCallback): void; reIndex(options: { session: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#remove */ /** @deprecated Use use deleteOne, deleteMany or bulkWrite */ remove(selector: object, callback: MongoCallback): void; /** @deprecated Use use deleteOne, deleteMany or bulkWrite */ remove(selector: object, options?: CommonOptions & { single?: boolean }): Promise; /** @deprecated Use use deleteOne, deleteMany or bulkWrite */ remove(selector: object, options?: CommonOptions & { single?: boolean }, callback?: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#rename */ rename(newName: string, callback: MongoCallback>): void; rename(newName: string, options?: { dropTarget?: boolean, session?: ClientSession }): Promise>; rename(newName: string, options: { dropTarget?: boolean, session?: ClientSession }, callback: MongoCallback>): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#replaceOne */ replaceOne(filter: FilterQuery, doc: TSchema, callback: MongoCallback): void; replaceOne(filter: FilterQuery, doc: TSchema, options?: ReplaceOneOptions): Promise; replaceOne(filter: FilterQuery, doc: TSchema, options: ReplaceOneOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#save */ /** @deprecated Use insertOne, insertMany, updateOne or updateMany */ save(doc: TSchema, callback: MongoCallback): void; /** @deprecated Use insertOne, insertMany, updateOne or updateMany */ save(doc: TSchema, options?: CommonOptions): Promise; /** @deprecated Use insertOne, insertMany, updateOne or updateMany */ save(doc: TSchema, options: CommonOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#stats */ stats(callback: MongoCallback): void; stats(options?: { scale: number; session?: ClientSession }): Promise; stats(options: { scale: number; session?: ClientSession }, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#update */ /** @deprecated use updateOne, updateMany or bulkWrite */ update( filter: FilterQuery, update: UpdateQuery | Partial, callback: MongoCallback, ): void; /** @deprecated use updateOne, updateMany or bulkWrite */ update( filter: FilterQuery, update: UpdateQuery | Partial, options?: UpdateOneOptions & { multi?: boolean }, ): Promise; /** @deprecated use updateOne, updateMany or bulkWrite */ update( filter: FilterQuery, update: UpdateQuery | Partial, options: UpdateOneOptions & { multi?: boolean }, callback: MongoCallback, ): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#updateMany */ updateMany( filter: FilterQuery, update: UpdateQuery | Partial, callback: MongoCallback, ): void; updateMany( filter: FilterQuery, update: UpdateQuery | Partial, options?: UpdateManyOptions, ): Promise; updateMany( filter: FilterQuery, update: UpdateQuery | Partial, options: UpdateManyOptions, callback: MongoCallback, ): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#updateOne */ updateOne( filter: FilterQuery, update: UpdateQuery | Partial, callback: MongoCallback, ): void; updateOne( filter: FilterQuery, update: UpdateQuery | Partial, options?: UpdateOneOptions, ): Promise; updateOne( filter: FilterQuery, update: UpdateQuery | Partial, options: UpdateOneOptions, callback: MongoCallback, ): void; /** http://mongodb.github.io/node-mongodb-native/3.3/api/Collection.html#watch */ watch( pipeline?: object[], options?: ChangeStreamOptions & { session?: ClientSession }, ): ChangeStream; } /** Update Query */ type KeysOfAType = { [key in keyof TSchema]: TSchema[key] extends Type ? key : never }[keyof TSchema]; type KeysOfOtherType = { [key in keyof TSchema]: TSchema[key] extends Type ? never : key; }[keyof TSchema]; type AcceptedFields = { readonly [key in KeysOfAType]?: AssignableType; }; /** It avoid uses fields of non Type */ type NotAcceptedFields = { readonly [key in KeysOfOtherType]?: never; }; type DotAndArrayNotation = { readonly [key: string]: AssignableType; }; type ReadonlyPartial = { readonly [key in keyof TSchema]?: TSchema[key]; }; export type OnlyFieldsOfType = AcceptedFields< TSchema, FieldType, AssignableType > & NotAcceptedFields & DotAndArrayNotation; export type MatchKeysAndValues = ReadonlyPartial & DotAndArrayNotation; type Unpacked = Type extends Array ? Element : Type; export type SortValues = -1 | 1; export type AddToSetOperators = { $each: Type; }; export type ArrayOperator = { $each: Type; $slice?: number; $position?: number; $sort?: SortValues | Record; }; export type SetFields = ({ readonly [key in KeysOfAType]?: Unpacked | AddToSetOperators; } & NotAcceptedFields) & { readonly [key: string]: AddToSetOperators | any; }; export type PushOperator = ({ readonly [key in KeysOfAType]?: Unpacked | ArrayOperator; } & NotAcceptedFields) & { readonly [key: string]: ArrayOperator | any; }; export type PullOperator = ({ readonly [key in KeysOfAType]?: Partial> | ObjectQuerySelector>; } & NotAcceptedFields) & { readonly [key: string]: QuerySelector | any; }; export type PullAllOperator = ({ readonly [key in KeysOfAType]?: TSchema[key]; } & NotAcceptedFields) & { readonly [key: string]: any[]; }; /** https://docs.mongodb.com/manual/reference/operator/update */ export type UpdateQuery = { /** https://docs.mongodb.com/manual/reference/operator/update-field/ */ $currentDate?: OnlyFieldsOfType; $inc?: OnlyFieldsOfType; $min?: MatchKeysAndValues; $max?: MatchKeysAndValues; $mul?: OnlyFieldsOfType; $rename?: { [key: string]: string }; $set?: MatchKeysAndValues; $setOnInsert?: MatchKeysAndValues; $unset?: OnlyFieldsOfType; /** https://docs.mongodb.com/manual/reference/operator/update-array/ */ $addToSet?: SetFields; $pop?: OnlyFieldsOfType; $pull?: PullOperator; $push?: PushOperator; $pullAll?: PullAllOperator; /** https://docs.mongodb.com/manual/reference/operator/update-bitwise/ */ $bit?: { [key: string]: { [key in 'and' | 'or' | 'xor']?: number }; }; }; /** https://docs.mongodb.com/manual/reference/operator/query/type/#available-types */ export enum BSONType { Double = 1, String, Object, Array, BinData, /** @deprecated */ Undefined, ObjectId, Boolean, Date, Null, Regex, /** @deprecated */ DBPointer, JavaScript, /** @deprecated */ Symbol, JavaScriptWithScope, Int, Timestamp, Long, Decimal, MinKey = -1, MaxKey = 127, } type BSONTypeAlias = | 'number' | 'double' | 'string' | 'object' | 'array' | 'binData' | 'undefined' | 'objectId' | 'bool' | 'date' | 'null' | 'regex' | 'dbPointer' | 'javascript' | 'symbol' | 'javascriptWithScope' | 'int' | 'timestamp' | 'long' | 'decimal' | 'minKey' | 'maxKey'; /** https://docs.mongodb.com/manual/reference/operator/query-bitwise */ type BitwiseQuery = | number /** */ | Binary /** */ | number[]; /** [ , , ... ] */ // we can search using alternative types in mongodb e.g. // string types can be searched using a regex in mongo // array types can be searched using their element type type RegExpForString = T extends string ? (RegExp | T): T; type MongoAltQuery = T extends Array ? (T | RegExpForString): RegExpForString; /** https://docs.mongodb.com/manual/reference/operator/query/#query-selectors */ export type QuerySelector = { // Comparison $eq?: T; $gt?: T; $gte?: T; $in?: T[]; $lt?: T; $lte?: T; $ne?: T; $nin?: T[]; // Logical $not?: T extends string ? (QuerySelector | RegExp) : QuerySelector; // Element /** * When `true`, `$exists` matches the documents that contain the field, * including documents where the field value is null. */ $exists?: boolean; $type?: BSONType | BSONTypeAlias; // Evaluation $expr?: any; $jsonSchema?: any; $mod?: T extends number ? [number, number] : never; $regex?: T extends string ? (RegExp | string) : never; $options?: T extends string ? string : never; // Geospatial // TODO: define better types for geo queries $geoIntersects?: { $geometry: object }; $geoWithin?: object; $near?: object; $nearSphere?: object; $maxDistance?: number; // Array // TODO: define better types for $all and $elemMatch $all?: T extends Array ? any[] : never; $elemMatch?: T extends Array ? object : never; $size?: T extends Array ? number : never; // Bitwise $bitsAllClear?: BitwiseQuery; $bitsAllSet?: BitwiseQuery; $bitsAnyClear?: BitwiseQuery; $bitsAnySet?: BitwiseQuery; }; export type RootQuerySelector = { /** https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and */ $and?: Array>; /** https://docs.mongodb.com/manual/reference/operator/query/nor/#op._S_nor */ $nor?: Array>; /** https://docs.mongodb.com/manual/reference/operator/query/or/#op._S_or */ $or?: Array>; /** https://docs.mongodb.com/manual/reference/operator/query/text */ $text?: { $search: string; $language?: string; $caseSensitive?: boolean; $diacraticSensitive?: boolean; }; /** https://docs.mongodb.com/manual/reference/operator/query/where/#op._S_where */ $where?: string | Function; /** https://docs.mongodb.com/manual/reference/operator/query/comment/#op._S_comment */ $comment?: string; // we could not find a proper TypeScript generic to support nested queries e.g. 'user.friends.name' // this will mark all unrecognized properties as any (including nested queries) [key: string]: any; }; export type ObjectQuerySelector = T extends object ? {[key in keyof T]?: QuerySelector } : QuerySelector; export type Condition = MongoAltQuery | QuerySelector>; export type FilterQuery = { [P in keyof T]?: Condition; } & RootQuerySelector; /** http://docs.mongodb.org/manual/reference/command/collStats/ */ export interface CollStats { /** * Namespace. */ ns: string; /** * Number of documents. */ count: number; /** * Collection size in bytes. */ size: number; /** * Average object size in bytes. */ avgObjSize: number; /** * (Pre)allocated space for the collection in bytes. */ storageSize: number; /** * Number of extents (contiguously allocated chunks of datafile space). */ numExtents: number; /** * Number of indexes. */ nindexes: number; /** * Size of the most recently created extent in bytes. */ lastExtentSize: number; /** * Padding can speed up updates if documents grow. */ paddingFactor: number; /** * A number that indicates the user-set flags on the collection. userFlags only appears when using the mmapv1 storage engine. */ userFlags?: number; /** * Total index size in bytes. */ totalIndexSize: number; /** * Size of specific indexes in bytes. */ indexSizes: { _id_: number; [index: string]: number; }; /** * `true` if the collection is capped. */ capped: boolean; /** * The maximum number of documents that may be present in a capped collection. */ max: number; /** * The maximum size of a capped collection. */ maxSize: number; wiredTiger?: WiredTigerData; indexDetails?: any; ok: number; } export interface WiredTigerData { LSM: { 'bloom filter false positives': number; 'bloom filter hits': number; 'bloom filter misses': number; 'bloom filter pages evicted from cache': number; 'bloom filter pages read into cache': number; 'bloom filters in the LSM tree': number; 'chunks in the LSM tree': number; 'highest merge generation in the LSM tree': number; 'queries that could have benefited from a Bloom filter that did not exist': number; 'sleep for LSM checkpoint throttle': number; 'sleep for LSM merge throttle': number; 'total size of bloom filters': number; }; 'block-manager': { 'allocations requiring file extension': number; 'blocks allocated': number; 'blocks freed': number; 'checkpoint size': number; 'file allocation unit size': number; 'file bytes available for reuse': number; 'file magic number': number; 'file major version number': number; 'file size in bytes': number; 'minor version number': number; }; btree: { 'btree checkpoint generation': number; 'column-store fixed-size leaf pages': number; 'column-store internal pages': number; 'column-store variable-size RLE encoded values': number; 'column-store variable-size deleted values': number; 'column-store variable-size leaf pages': number; 'fixed-record size': number; 'maximum internal page key size': number; 'maximum internal page size': number; 'maximum leaf page key size': number; 'maximum leaf page size': number; 'maximum leaf page value size': number; 'maximum tree depth': number; 'number of key/value pairs': number; 'overflow pages': number; 'pages rewritten by compaction': number; 'row-store internal pages': number; 'row-store leaf pages': number; }; cache: { 'bytes currently in the cache': number; 'bytes read into cache': number; 'bytes written from cache': number; 'checkpoint blocked page eviction': number; 'data source pages selected for eviction unable to be evicted': number; 'hazard pointer blocked page eviction': number; 'in-memory page passed criteria to be split': number; 'in-memory page splits': number; 'internal pages evicted': number; 'internal pages split during eviction': number; 'leaf pages split during eviction': number; 'modified pages evicted': number; 'overflow pages read into cache': number; 'overflow values cached in memory': number; 'page split during eviction deepened the tree': number; 'page written requiring lookaside records': number; 'pages read into cache': number; 'pages read into cache requiring lookaside entries': number; 'pages requested from the cache': number; 'pages written from cache': number; 'pages written requiring in-memory restoration': number; 'tracked dirty bytes in the cache': number; 'unmodified pages evicted': number; }; cache_walk: { 'Average difference between current eviction generation when the page was last considered': number; 'Average on-disk page image size seen': number; 'Clean pages currently in cache': number; 'Current eviction generation': number; 'Dirty pages currently in cache': number; 'Entries in the root page': number; 'Internal pages currently in cache': number; 'Leaf pages currently in cache': number; 'Maximum difference between current eviction generation when the page was last considered': number; 'Maximum page size seen': number; 'Minimum on-disk page image size seen': number; 'On-disk page image sizes smaller than a single allocation unit': number; 'Pages created in memory and never written': number; 'Pages currently queued for eviction': number; 'Pages that could not be queued for eviction': number; 'Refs skipped during cache traversal': number; 'Size of the root page': number; 'Total number of pages currently in cache': number; }; compression: { 'compressed pages read': number; 'compressed pages written': number; 'page written failed to compress': number; 'page written was too small to compress': number; 'raw compression call failed, additional data available': number; 'raw compression call failed, no additional data available': number; 'raw compression call succeeded': number; }; cursor: { 'bulk-loaded cursor-insert calls': number; 'create calls': number; 'cursor-insert key and value bytes inserted': number; 'cursor-remove key bytes removed': number; 'cursor-update value bytes updated': number; 'insert calls': number; 'next calls': number; 'prev calls': number; 'remove calls': number; 'reset calls': number; 'restarted searches': number; 'search calls': number; 'search near calls': number; 'truncate calls': number; 'update calls': number; }; reconciliation: { 'dictionary matches': number; 'fast-path pages deleted': number; 'internal page key bytes discarded using suffix compression': number; 'internal page multi-block writes': number; 'internal-page overflow keys': number; 'leaf page key bytes discarded using prefix compression': number; 'leaf page multi-block writes': number; 'leaf-page overflow keys': number; 'maximum blocks required for a page': number; 'overflow values written': number; 'page checksum matches': number; 'page reconciliation calls': number; 'page reconciliation calls for eviction': number; 'pages deleted': number; }; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#aggregate */ export interface CollectionAggregationOptions { readPreference?: ReadPreferenceOrMode; /** * Return the query as cursor, on 2.6 > it returns as a real cursor * on pre 2.6 it returns as an emulated cursor. */ cursor?: { batchSize?: number }; /** * Explain returns the aggregation execution plan (requires mongodb 2.6 >). */ explain?: boolean; /** * Lets the server know if it can use disk to store * temporary results for the aggregation (requires mongodb 2.6 >). */ allowDiskUse?: boolean; /** * specifies a cumulative time limit in milliseconds for processing operations * on the cursor. MongoDB interrupts the operation at the earliest following interrupt point. */ maxTimeMS?: number; /** * Allow driver to bypass schema validation in MongoDB 3.2 or higher. */ bypassDocumentValidation?: boolean; hint?: string | object; raw?: boolean; promoteLongs?: boolean; promoteValues?: boolean; promoteBuffers?: boolean; collation?: CollationDocument; comment?: string; session?: ClientSession; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertMany */ export interface CollectionInsertManyOptions extends CommonOptions { /** * Serialize functions on any object. */ serializeFunctions?: boolean; /** * Force server to assign _id values instead of driver. */ forceServerObjectId?: boolean; /** * Allow driver to bypass schema validation in MongoDB 3.2 or higher. */ bypassDocumentValidation?: boolean; /** * If true, when an insert fails, don't execute the remaining writes. If false, continue with remaining inserts when one fails. */ ordered?: boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#bulkWrite */ export interface CollectionBulkWriteOptions extends CommonOptions { /** * Serialize functions on any object. */ serializeFunctions?: boolean; /** * Execute write operation in ordered or unordered fashion. */ ordered?: boolean; /** * Allow driver to bypass schema validation in MongoDB 3.2 or higher. */ bypassDocumentValidation?: boolean; //Force server to assign _id values instead of driver. forceServerObjectId?: boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~BulkWriteOpResult */ export interface BulkWriteOpResultObject { insertedCount?: number; matchedCount?: number; modifiedCount?: number; deletedCount?: number; upsertedCount?: number; insertedIds?: any; upsertedIds?: any; result?: any; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#count */ export interface MongoCountPreferences { /** * The limit of documents to count. */ limit?: number; /** * The number of documents to skip for the count. */ skip?: number; /** * An index name hint for the query. */ hint?: string; /** * The preferred read preference */ readPreference?: ReadPreferenceOrMode; maxTimeMS?: number; session?: ClientSession; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~deleteWriteOpResult */ export interface DeleteWriteOpResultObject { //The raw result returned from MongoDB, field will vary depending on server version. result: { //Is 1 if the command executed correctly. ok?: number; //The total count of documents deleted. n?: number; }; //The connection object used for the operation. connection?: any; //The number of documents deleted. deletedCount?: number; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~findAndModifyWriteOpResult */ export interface FindAndModifyWriteOpResultObject { //Document returned from findAndModify command. value?: TSchema; //The raw lastErrorObject returned from the command. lastErrorObject?: any; //Is 1 if the command executed correctly. ok?: number; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndReplace */ export interface FindOneAndReplaceOption extends CommonOptions { projection?: object; sort?: object; maxTimeMS?: number; upsert?: boolean; returnOriginal?: boolean; collation?: CollationDocument; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndUpdate */ export interface FindOneAndUpdateOption extends FindOneAndReplaceOption { arrayFilters?: object[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOneAndDelete */ export interface FindOneAndDeleteOption { projection?: object; sort?: object; maxTimeMS?: number; session?: ClientSession; collation?: CollationDocument; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#geoHaystackSearch */ export interface GeoHaystackSearchOptions { readPreference?: ReadPreferenceOrMode; maxDistance?: number; search?: object; limit?: number; session?: ClientSession; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Code.html */ export class Code { constructor(code: string | Function, scope?: object); code: string | Function; scope: any; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/OrderedBulkOperation.html */ export interface OrderedBulkOperation { length: number; /** http://mongodb.github.io/node-mongodb-native/3.1/api/OrderedBulkOperation.html#execute */ execute(callback: MongoCallback): void; execute(options?: FSyncOptions): Promise; execute(options: FSyncOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/OrderedBulkOperation.html#find */ find(selector: object): FindOperatorsOrdered; /** http://mongodb.github.io/node-mongodb-native/3.1/api/OrderedBulkOperation.html#insert */ insert(doc: object): OrderedBulkOperation; } /** https://docs.mongodb.com/manual/reference/method/BulkWriteResult/index.html#BulkWriteResult.upserted */ export interface BulkWriteResultUpsertedIdObject { index: number; _id: ObjectId; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/BulkWriteResult.html */ export interface BulkWriteResult { ok: number; nInserted: number; nUpdated: number; nUpserted: number; nModified: number; nRemoved: number; getInsertedIds(): object[]; getLastOp(): object; getRawResponse(): object; getUpsertedIdAt(index: number): BulkWriteResultUpsertedIdObject; getUpsertedIds(): BulkWriteResultUpsertedIdObject[]; getWriteConcernError(): WriteConcernError; getWriteErrorAt(index: number): WriteError; getWriteErrorCount(): number; getWriteErrors(): object[]; hasWriteErrors(): boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/WriteError.html */ export interface WriteError { //Write concern error code. code: number; //Write concern error original bulk operation index. index: number; //Write concern error message. errmsg: string; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/WriteConcernError.html */ export interface WriteConcernError { //Write concern error code. code: number; //Write concern error message. errmsg: string; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/FindOperatorsOrdered.html */ export interface FindOperatorsOrdered { delete(): OrderedBulkOperation; deleteOne(): OrderedBulkOperation; replaceOne(doc: object): OrderedBulkOperation; update(doc: object): OrderedBulkOperation; updateOne(doc: object): OrderedBulkOperation; upsert(): FindOperatorsOrdered; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/UnorderedBulkOperation.html */ export interface UnorderedBulkOperation { /** http://mongodb.github.io/node-mongodb-native/3.1/api/lib_bulk_unordered.js.html line 339 */ length: number; /** http://mongodb.github.io/node-mongodb-native/3.1/api/UnorderedBulkOperation.html#execute */ execute(callback: MongoCallback): void; execute(options?: FSyncOptions): Promise; execute(options: FSyncOptions, callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/UnorderedBulkOperation.html#find */ find(selector: object): FindOperatorsUnordered; /** http://mongodb.github.io/node-mongodb-native/3.1/api/UnorderedBulkOperation.html#insert */ insert(doc: object): UnorderedBulkOperation; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/FindOperatorsUnordered.html */ export interface FindOperatorsUnordered { length: number; remove(): UnorderedBulkOperation; removeOne(): UnorderedBulkOperation; replaceOne(doc: object): UnorderedBulkOperation; update(doc: object): UnorderedBulkOperation; updateOne(doc: object): UnorderedBulkOperation; upsert(): FindOperatorsUnordered; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#findOne */ export interface FindOneOptions { limit?: number; sort?: any[] | object; projection?: object; /** * @deprecated Use options.projection instead */ fields?: object; skip?: number; hint?: object; explain?: boolean; snapshot?: boolean; timeout?: boolean; tailable?: boolean; batchSize?: number; returnKey?: boolean; maxScan?: number; min?: number; max?: number; showDiskLoc?: boolean; comment?: string; raw?: boolean; promoteLongs?: boolean; promoteValues?: boolean; promoteBuffers?: boolean; readPreference?: ReadPreferenceOrMode; partial?: boolean; maxTimeMS?: number; collation?: CollationDocument; session?: ClientSession; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertOne */ export interface CollectionInsertOneOptions extends CommonOptions { /** * Serialize functions on any object. */ serializeFunctions?: boolean; //Force server to assign _id values instead of driver. forceServerObjectId?: boolean; //Allow driver to bypass schema validation in MongoDB 3.2 or higher. bypassDocumentValidation?: boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~insertWriteOpResult */ export interface InsertWriteOpResult { insertedCount: number; ops: TSchema[]; insertedIds: { [key: number]: TSchema['_id'] }; connection: any; result: { ok: number; n: number }; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~insertOneWriteOpResult */ export interface InsertOneWriteOpResult { insertedCount: number; ops: TSchema[]; insertedId: TSchema['_id']; connection: any; result: { ok: number; n: number }; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#parallelCollectionScan */ export interface ParallelCollectionScanOptions { readPreference?: ReadPreferenceOrMode; batchSize?: number; numCursors?: number; raw?: boolean; session?: ClientSession; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#replaceOne */ export interface ReplaceOneOptions extends CommonOptions { upsert?: boolean; bypassDocumentValidation?: boolean; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#updateOne */ export interface UpdateOneOptions extends ReplaceOneOptions { arrayFilters?: object[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#updateMany */ export interface UpdateManyOptions extends CommonOptions { upsert?: boolean; arrayFilters?: object[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~updateWriteOpResult */ export interface UpdateWriteOpResult { result: { ok: number; n: number; nModified: number }; connection: any; matchedCount: number; modifiedCount: number; upsertedCount: number; upsertedId: { _id: ObjectId }; } /** https://github.com/mongodb/node-mongodb-native/blob/2.2/lib/collection.js#L957 */ export interface ReplaceWriteOpResult extends UpdateWriteOpResult { ops: any[]; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#mapReduce */ export interface MapReduceOptions { readPreference?: ReadPreferenceOrMode; out?: object; query?: object; sort?: object; limit?: number; keeptemp?: boolean; finalize?: Function | string; scope?: object; jsMode?: boolean; verbose?: boolean; bypassDocumentValidation?: boolean; session?: ClientSession; } export type CollectionMapFunction = (this: TSchema) => void; export type CollectionReduceFunction = (key: TKey, values: TValue[]) => TValue; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~WriteOpResult */ export interface WriteOpResult { ops: any[]; connection: any; result: any; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#~resultCallback */ export type CursorResult = object | null | boolean; type Default = any; type DefaultSchema = any; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html */ export class Cursor extends Readable { sortValue: string; timeout: boolean; readPreference: ReadPreference; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#addCursorFlag */ addCursorFlag(flag: string, value: boolean): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#addQueryModifier */ addQueryModifier(name: string, value: boolean): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#batchSize */ batchSize(value: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#clone */ clone(): Cursor; // still returns the same type /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#close */ close(): Promise; close(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#collation */ collation(value: CollationDocument): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#comment */ comment(value: string): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#count */ count(callback: MongoCallback): void; count(applySkipLimit: boolean, callback: MongoCallback): void; count(options: CursorCommentOptions, callback: MongoCallback): void; count(applySkipLimit: boolean, options: CursorCommentOptions, callback: MongoCallback): void; count(applySkipLimit?: boolean, options?: CursorCommentOptions): Promise; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#explain */ explain(): Promise; explain(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#filter */ filter(filter: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#forEach */ forEach(iterator: IteratorCallback, callback: EndCallback): void; forEach(iterator: IteratorCallback): Promise; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#hasNext */ hasNext(): Promise; hasNext(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#hint */ hint(hint: string | object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#isClosed */ isClosed(): boolean; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#limit */ limit(value: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#map */ map(transform: (document: T) => U): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#max */ max(max: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#maxAwaitTimeMS */ maxAwaitTimeMS(value: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#maxScan */ maxScan(maxScan: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#maxTimeMS */ maxTimeMS(value: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#min */ min(min: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#next */ next(): Promise; next(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#project */ project(value: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#read */ read(size: number): string | Buffer | void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#next */ returnKey(returnKey: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#rewind */ rewind(): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#setCursorOption */ setCursorOption(field: string, value: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#setReadPreference */ setReadPreference(readPreference: ReadPreferenceOrMode): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#showRecordId */ showRecordId(showRecordId: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#skip */ skip(value: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#snapshot */ snapshot(snapshot: object): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#sort */ sort(keyOrList: string | object[] | object, direction?: number): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#stream */ stream(options?: { transform?: (document: T) => any }): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#toArray */ toArray(): Promise; toArray(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#unshift */ unshift(stream: Buffer | string): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#count */ export interface CursorCommentOptions { skip?: number; limit?: number; maxTimeMS?: number; hint?: string; readPreference?: ReadPreferenceOrMode; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#~iteratorCallback */ export interface IteratorCallback { (doc: T): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#~endCallback */ export interface EndCallback { (error: MongoError): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#~resultCallback */ export type AggregationCursorResult = object | null; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html */ export class AggregationCursor extends Readable { /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#batchSize */ batchSize(value: number): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#clone */ clone(): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#close */ close(): Promise; close(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#each */ each(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#explain */ explain(): Promise; explain(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#geoNear */ geoNear(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#group */ group(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#hasNext */ hasNext(): Promise; hasNext(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#isClosed */ isClosed(): boolean; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#limit */ limit(value: number): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#lookup */ lookup(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#match */ match(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#maxTimeMS */ maxTimeMS(value: number): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#next */ next(): Promise; next(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#out */ out(destination: string): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#project */ project(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#read */ read(size: number): string | Buffer | void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#redact */ redact(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#rewind */ rewind(): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#setEncoding */ skip(value: number): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#sort */ sort(document: object): AggregationCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#toArray */ toArray(): Promise; toArray(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#unshift */ unshift(stream: Buffer | string): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/AggregationCursor.html#unwind */ unwind(field: string): AggregationCursor; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#~resultCallback */ export type CommandCursorResult = object | null; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html */ export class CommandCursor extends Readable { /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#hasNext */ hasNext(): Promise; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#hasNext */ hasNext(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#batchSize */ batchSize(value: number): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#clone */ clone(): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#close */ close(): Promise; close(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#each */ each(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#isClosed */ isClosed(): boolean; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#maxTimeMS */ maxTimeMS(value: number): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#next */ next(): Promise; next(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#read */ read(size: number): string | Buffer | void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#rewind */ rewind(): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#setReadPreference */ setReadPreference(readPreference: ReadPreferenceOrMode): CommandCursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#toArray */ toArray(): Promise; toArray(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/CommandCursor.html#unshift */ unshift(stream: Buffer | string): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html */ export class GridFSBucket { constructor(db: Db, options?: GridFSBucketOptions); /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#delete */ delete(id: ObjectId, callback?: GridFSBucketErrorCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#drop */ drop(callback?: GridFSBucketErrorCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#find */ find(filter?: object, options?: GridFSBucketFindOptions): Cursor; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#openDownloadStream */ openDownloadStream(id: ObjectId, options?: { start: number, end: number }): GridFSBucketReadStream; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#openDownloadStreamByName */ openDownloadStreamByName(filename: string, options?: { revision: number, start: number, end: number }): GridFSBucketReadStream; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#openUploadStream */ openUploadStream(filename: string, options?: GridFSBucketOpenUploadStreamOptions): GridFSBucketWriteStream; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#openUploadStreamWithId */ openUploadStreamWithId(id: GridFSBucketWriteStreamId, filename: string, options?: GridFSBucketOpenUploadStreamOptions): GridFSBucketWriteStream; /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#rename */ rename(id: ObjectId, filename: string, callback?: GridFSBucketErrorCallback): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html */ export interface GridFSBucketOptions { bucketName?: string; chunkSizeBytes?: number; writeConcern?: WriteConcern; readPreference?: ReadPreferenceOrMode; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#~errorCallback */ export interface GridFSBucketErrorCallback { (err?: MongoError): void; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#find */ export interface GridFSBucketFindOptions { batchSize?: number; limit?: number; maxTimeMS?: number; noCursorTimeout?: boolean; skip?: number; sort?: object; } /** https://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucket.html#openUploadStream */ export interface GridFSBucketOpenUploadStreamOptions { chunkSizeBytes?: number; metadata?: object; contentType?: string; aliases?: string[]; } /** https://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucketReadStream.html */ export class GridFSBucketReadStream extends Readable { id: ObjectId; constructor(chunks: Collection, files: Collection, readPreference: object, filter: object, options?: GridFSBucketReadStreamOptions); } /** https://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucketReadStream.html */ export interface GridFSBucketReadStreamOptions { sort?: number; skip?: number; start?: number; end?: number; } /** https://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucketWriteStream.html */ export class GridFSBucketWriteStream extends Writable { id: GridFSBucketWriteStreamId; constructor(bucket: GridFSBucket, filename: string, options?: GridFSBucketWriteStreamOptions); } /** https://mongodb.github.io/node-mongodb-native/3.1/api/GridFSBucketWriteStream.html */ export interface GridFSBucketWriteStreamOptions extends WriteConcern { /** * Custom file id for the GridFS file. */ id?: GridFSBucketWriteStreamId; /** * The chunk size to use, in bytes */ chunkSizeBytes?: number; /** * Default false; If true, disables adding an md5 field to file data */ disableMD5?: boolean; } /** * This is similar to Parameters but will work with a type which is * a function or with a tuple specifying arguments, which are both * common ways to define eventemitter events */ type EventArguments = [T] extends [(...args: infer U) => any] ? U : [T] extends [undefined] ? [] : [T]; /** * Type-safe event emitter from https://github.com/andywer/typed-emitter. * * Use it like this: * * interface MyEvents { * error: (error: Error) => void * message: (from: string, content: string) => void * } * * const myEmitter = new EventEmitter() as TypedEmitter * * myEmitter.on("message", (from, content) => { * // ... * }) * * myEmitter.emit("error", "x") // <- Will catch this type error */ declare class TypedEventEmitter { addListener (event: E, listener: Events[E]): this; on (event: E, listener: Events[E]): this; once (event: E, listener: Events[E]): this; prependListener (event: E, listener: Events[E]): this; prependOnceListener (event: E, listener: Events[E]): this; off(event: E, listener: Events[E]): this; removeAllListeners (event?: E): this; removeListener (event: E, listener: Events[E]): this; emit (event: E, ...args: EventArguments): boolean; eventNames (): Array; listeners (event: E): Function[]; listenerCount (event: E): number; getMaxListeners (): number; setMaxListeners (maxListeners: number): this; } interface ChangeStreamEvents { change: (doc: ChangeEvent) => void; close: () => void; end: () => void; error: (err: MongoError) => void; resumeTokenChanged: (newToken: ResumeToken) => void; } /** http://mongodb.github.io/node-mongodb-native/3.3/api/ChangeStream.html */ export class ChangeStream extends TypedEventEmitter> { resumeToken: ResumeToken; constructor(parent: MongoClient | Db | Collection, pipeline: object[], options?: ChangeStreamOptions); /** http://mongodb.github.io/node-mongodb-native/3.1/api/ChangeStream.html#close */ close(): Promise; close(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/ChangeStream.html#hasNext */ hasNext(): Promise; hasNext(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/ChangeStream.html#isClosed */ isClosed(): boolean; /** http://mongodb.github.io/node-mongodb-native/3.1/api/ChangeStream.html#next */ next(): Promise; next(callback: MongoCallback): void; /** http://mongodb.github.io/node-mongodb-native/3.1/api/ChangeStream.html#stream */ stream(options?: { transform?: Function }): Cursor; } export class ResumeToken {} export type ChangeEventTypes = 'insert' | 'delete' | 'replace' | 'update' | 'drop' | 'rename' | 'dropDatabase' | 'invalidate'; export interface ChangeEventBase { _id: ResumeToken; /** * We leave this off the base type so that we can differentiate * by checking its value and get intelligent types on the other fields */ // operationType: ChangeEventTypes; ns: { db: string; coll: string; }; clusterTime: Timestamp; txnNumber?: number; lsid?: { "id": any; "uid": any; }; } export interface ChangeEventCR extends ChangeEventBase { operationType: 'insert' | 'replace'; fullDocument?: TSchema; documentKey: { _id: ExtractIdType; }; } type FieldUpdates = Partial & {[key: string]: any}; export interface ChangeEventUpdate extends ChangeEventBase { operationType: 'update'; updateDescription: { /** * This is an object with all changed fields; if they are nested, * the keys will be paths, e.g. 'question.answer.0.text': 'new text' */ updatedFields: FieldUpdates; removedFields: Array; }; fullDocument?: TSchema; documentKey: { _id: ExtractIdType; }; } export interface ChangeEventDelete extends ChangeEventBase { operationType: 'delete'; documentKey: { _id: ExtractIdType; }; } export interface ChangeEventRename extends ChangeEventBase { operationType: 'rename'; to: { db: string; coll: string; }; } export interface ChangeEventOther extends ChangeEventBase { operationType: 'drop' | 'dropDatabase'; } export interface ChangeEventInvalidate { _id: ResumeToken; operationType: 'invalidate'; clusterTime: Timestamp; } export type ChangeEvent = ChangeEventCR | ChangeEventUpdate | ChangeEventDelete | ChangeEventRename | ChangeEventOther | ChangeEventInvalidate; /** https://mongodb.github.io/node-mongodb-native/3.3/api/global.html#ChangeStreamOptions */ export interface ChangeStreamOptions { fullDocument?: 'default' | 'updateLookup'; maxAwaitTimeMS?: number; resumeAfter?: ResumeToken; startAfter?: ResumeToken; startAtOperationTime?: Timestamp; batchSize?: number; collation?: CollationDocument; readPreference?: ReadPreferenceOrMode; } type GridFSBucketWriteStreamId = string | number | object | ObjectId; export interface LoggerOptions { /** * Custom logger function */ loggerLevel?: string; /** * Override default global log level. */ logger?: log; } export type log = (message?: string, state?: LoggerState) => void; export interface LoggerState { type: string; message: string; className: string; pid: number; date: number; } /** http://mongodb.github.io/node-mongodb-native/3.1/api/Logger.html */ export class Logger { constructor(className: string, options?: LoggerOptions); /** * Log a message at the debug level */ debug(message: string, state: LoggerState): void; /** * Log a message at the warn level */ warn(message: string, state: LoggerState): void; /** * Log a message at the info level */ info(message: string, state: LoggerState): void; /** * Log a message at the error level */ error(message: string, state: LoggerState): void; /** * Is the logger set at info level */ isInfo(): boolean; /** * Is the logger set at error level */ isError(): boolean; /** * Is the logger set at error level */ isWarn(): boolean; /** * Is the logger set at debug level */ isDebug(): boolean; /** * Resets the logger to default settings, error and no filtered classes */ static reset(): void; /** * Get the current logger function */ static currentLogger(): log; //Set the current logger function static setCurrentLogger(log: log): void; /** * Set what classes to log. */ static filter(type: string, values: string[]): void; /** * Set the current log level */ static setLevel(level: string): void; } /** https://docs.mongodb.com/manual/reference/collation/#collation-document-fields */ export interface CollationDocument { locale: string; strength?: number; caseLevel?: boolean; caseFirst?: string; numericOrdering?: boolean; alternate?: string; maxVariable?: string; backwards?: boolean; normalization?: boolean; } /** https://docs.mongodb.com/manual/reference/command/createIndexes/ */ export interface IndexSpecification { key: object; name?: string; background?: boolean; unique?: boolean; partialFilterExpression?: object; sparse?: boolean; expireAfterSeconds?: number; storageEngine?: object; weights?: object; default_language?: string; language_override?: string; textIndexVersion?: number; '2dsphereIndexVersion'?: number; bits?: number; min?: number; max?: number; bucketSize?: number; collation?: CollationDocument; }