diff --git a/types/mongodb/index.d.ts b/types/mongodb/index.d.ts index 230f593094..5111e4d9ca 100644 --- a/types/mongodb/index.d.ts +++ b/types/mongodb/index.d.ts @@ -955,9 +955,9 @@ export interface Collection { /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#listIndexes */ listIndexes(options?: { batchSize?: number, readPreference?: ReadPreference | string, 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; + 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; @@ -1663,9 +1663,9 @@ export interface MapReduceOptions { session?: ClientSession; } -export type CollectionMapFunction = () => void; +export type CollectionMapFunction = (this: TSchema) => void; -export type CollectionReduceFunction = (key: string, values: any) => any; +export type CollectionReduceFunction = (key: TKey, values: TValue[]) => TValue; /** http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#~WriteOpResult */ export interface WriteOpResult { diff --git a/types/mongodb/mongodb-tests.ts b/types/mongodb/mongodb-tests.ts index d8eb287964..f34e2e5c29 100644 --- a/types/mongodb/mongodb-tests.ts +++ b/types/mongodb/mongodb-tests.ts @@ -317,3 +317,29 @@ mongodb.connect(connectionString).then((client) => { runTransactionWithRetry(updateEmployeeInfo, client, session) ); }); + +// https://docs.mongodb.com/manual/core/map-reduce/ + +// Declare emit function to be called inside map function +declare function emit(key: any, value: any): void; + +interface ITestMapReduceSchema { + cust_id: string; + amount: number; + status: string; +} + +function testCollectionMapFunction(this: ITestMapReduceSchema) { + emit(this.cust_id, this.amount); +} + +function testCollectionReduceFunction(_key: string, values: number[]): number { + return values.reduce((a, v) => a + v, 0); +} + +mongodb.connect(connectionString).then((client) => { + client.db("test").collection('test-mapReduce-collection').mapReduce( + testCollectionMapFunction, + testCollectionReduceFunction + ); +});