Skip to content

Commit cd63fab

Browse files
committed
fix: use own types and add documentation
1 parent 622946d commit cd63fab

File tree

7 files changed

+151
-17
lines changed

7 files changed

+151
-17
lines changed

packages/i18n/src/locales/en_US.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,43 @@ const translations: Catalog = {
422422
},
423423
},
424424
},
425+
ClientBulkWriteResult: {
426+
help: {
427+
description: 'ClientBulkWriteResult Class',
428+
attributes: {
429+
acknowledged: {
430+
description: 'Acknowledged returned from the server',
431+
},
432+
insertedCount: {
433+
description: 'Number of documents inserted',
434+
},
435+
matchedCount: {
436+
description: 'Number of documents matched',
437+
},
438+
modifiedCount: {
439+
description: 'Number of documents modified',
440+
},
441+
deletedCount: {
442+
description: 'Number of documents deleted',
443+
},
444+
upsertedCount: {
445+
description: 'Number of documents upserted',
446+
},
447+
insertResults: {
448+
description:
449+
'The results of each individual insert operation that was successfully performed',
450+
},
451+
updateResults: {
452+
description:
453+
'The results of each individual update operation that was successfully performed',
454+
},
455+
deleteResults: {
456+
description:
457+
'The results of each individual delete operation that was successfully performed.',
458+
},
459+
},
460+
},
461+
},
425462
CommandResult: {
426463
help: {
427464
description: 'CommandResult Class',
@@ -2240,6 +2277,12 @@ const translations: Catalog = {
22402277
link: 'https://docs.mongodb.com/manual/reference/method/Mongo.startSession/',
22412278
description: 'Starts a session for the connection.',
22422279
},
2280+
bulkWrite: {
2281+
link: 'https://docs.mongodb.com/manual/reference/method/Mongo.bulkWrite',
2282+
description:
2283+
'Performs multiple write operations across databases and collections with controls for order of execution.',
2284+
example: 'db.getMongo().bulkWrite(operations, options)',
2285+
},
22432286
getCollection: {
22442287
link: 'https://docs.mongodb.com/manual/reference/method/Mongo.getCollection',
22452288
description:

packages/service-provider-core/src/all-transport-types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type {
77
BulkWriteOptions,
88
BulkWriteResult,
99
ClientBulkWriteResult,
10+
ClientBulkWriteOptions,
1011
ChangeStream,
1112
ChangeStreamOptions,
1213
ClientSession,

packages/service-provider-core/src/writable.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ClientBulkWriteOptions, RunCursorCommandOptions } from 'mongodb';
1+
import type { RunCursorCommandOptions } from 'mongodb';
22
import type {
33
Document,
44
InsertOneOptions,
@@ -12,6 +12,7 @@ import type {
1212
AnyBulkWriteOperation,
1313
AnyClientBulkWriteModel,
1414
ClientBulkWriteResult,
15+
ClientBulkWriteOptions,
1516
DeleteOptions,
1617
DeleteResult,
1718
InsertManyResult,

packages/service-provider-node-driver/src/node-driver-service-provider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import type {
2727
BulkWriteOptions,
2828
BulkWriteResult,
2929
ClientBulkWriteResult,
30+
ClientBulkWriteOptions,
3031
ClientSessionOptions,
3132
Collection,
3233
CountDocumentsOptions,
@@ -637,7 +638,7 @@ export class NodeDriverServiceProvider
637638
*/
638639
clientBulkWrite(
639640
models: AnyClientBulkWriteModel<Document>[],
640-
options: BulkWriteOptions = {}
641+
options: ClientBulkWriteOptions = {}
641642
): Promise<ClientBulkWriteResult> {
642643
options = { ...this.baseCmdOptions, ...options };
643644
return this.mongoClient.bulkWrite(models, options);

packages/shell-api/src/mongo.spec.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
startSharedTestServer,
3636
} from '../../../testing/integration-testing-hooks';
3737
import { dummyOptions } from './helpers.spec';
38+
import { ClientBulkWriteResult } from './result';
3839

3940
const sampleOpts = {
4041
causalConsistency: false,
@@ -1051,17 +1052,19 @@ describe('Mongo', function () {
10511052
document: { name: 'Prince' },
10521053
},
10531054
])
1054-
).deep.equals({
1055-
acknowledged: true,
1056-
insertedCount: 3,
1057-
upsertedCount: 0,
1058-
matchedCount: 0,
1059-
modifiedCount: 0,
1060-
deletedCount: 1,
1061-
insertResults: undefined,
1062-
updateResults: undefined,
1063-
deleteResults: undefined,
1064-
});
1055+
).deep.equals(
1056+
new ClientBulkWriteResult({
1057+
acknowledged: true,
1058+
insertedCount: 3,
1059+
upsertedCount: 0,
1060+
matchedCount: 0,
1061+
modifiedCount: 0,
1062+
deletedCount: 1,
1063+
insertResults: undefined,
1064+
updateResults: undefined,
1065+
deleteResults: undefined,
1066+
})
1067+
);
10651068

10661069
expect(
10671070
await mongo.getDB('db').getCollection('authors').count()

packages/shell-api/src/mongo.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import type {
3737
ServerApiVersion,
3838
WriteConcern,
3939
AnyClientBulkWriteModel,
40-
ClientBulkWriteResult,
40+
ClientBulkWriteOptions,
4141
} from '@mongosh/service-provider-core';
4242
import type { ConnectionInfo } from '@mongosh/arg-parser';
4343
import {
@@ -47,6 +47,7 @@ import {
4747
import type Collection from './collection';
4848
import Database from './database';
4949
import type ShellInstanceState from './shell-instance-state';
50+
import { ClientBulkWriteResult } from './result';
5051
import { CommandResult } from './result';
5152
import { redactURICredentials } from '@mongosh/history';
5253
import { asPrintable, ServerVersions, Topologies } from './enums';
@@ -64,7 +65,6 @@ import { ShellApiErrors } from './error-codes';
6465
import type { LogEntry } from './log-entry';
6566
import { parseAnyLogEntry } from './log-entry';
6667
import type { ShellBson } from './shell-bson';
67-
import type { ClientBulkWriteOptions } from 'mongodb';
6868

6969
/* Utility, inverse of Readonly<T> */
7070
type Mutable<T> = {
@@ -371,13 +371,35 @@ export default class Mongo extends ShellApiClass {
371371
@returnsPromise
372372
@serverVersions(['8.0.0', ServerVersions.latest])
373373
@apiVersions([1])
374-
bulkWrite(
374+
async bulkWrite(
375375
models: AnyClientBulkWriteModel<Document>[],
376376
options: ClientBulkWriteOptions = {}
377377
): Promise<ClientBulkWriteResult> {
378378
this._emitMongoApiCall('bulkWrite', { options });
379379

380-
return this._serviceProvider.clientBulkWrite(models, options);
380+
const {
381+
acknowledged,
382+
insertedCount,
383+
matchedCount,
384+
modifiedCount,
385+
deletedCount,
386+
upsertedCount,
387+
insertResults,
388+
updateResults,
389+
deleteResults,
390+
} = await this._serviceProvider.clientBulkWrite(models, options);
391+
392+
return new ClientBulkWriteResult({
393+
acknowledged,
394+
insertedCount,
395+
matchedCount,
396+
modifiedCount,
397+
deletedCount,
398+
upsertedCount,
399+
insertResults,
400+
updateResults,
401+
deleteResults,
402+
});
381403
}
382404

383405
@returnsPromise

packages/shell-api/src/result.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,69 @@ export class CommandResult<T = unknown> extends ShellApiValueClass {
2525
}
2626
}
2727

28+
export type ClientInsertResult = {
29+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
30+
insertedId: any;
31+
};
32+
33+
export type ClientUpdateResult = {
34+
matchedCount: number;
35+
modifiedCount: number;
36+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
37+
upsertedId?: any;
38+
didUpsert: boolean;
39+
};
40+
41+
export type ClientDeleteResult = {
42+
deletedCount: number;
43+
};
44+
45+
@shellApiClassDefault
46+
export class ClientBulkWriteResult extends ShellApiValueClass {
47+
acknowledged: boolean;
48+
insertedCount: number;
49+
matchedCount: number;
50+
modifiedCount: number;
51+
deletedCount: number;
52+
upsertedCount: number;
53+
readonly insertResults?: ReadonlyMap<number, ClientInsertResult>;
54+
readonly updateResults?: ReadonlyMap<number, ClientUpdateResult>;
55+
readonly deleteResults?: ReadonlyMap<number, ClientDeleteResult>;
56+
57+
constructor({
58+
acknowledged,
59+
insertedCount,
60+
matchedCount,
61+
modifiedCount,
62+
deletedCount,
63+
upsertedCount,
64+
insertResults,
65+
updateResults,
66+
deleteResults,
67+
}: {
68+
acknowledged: boolean;
69+
insertedCount: number;
70+
matchedCount: number;
71+
modifiedCount: number;
72+
deletedCount: number;
73+
upsertedCount: number;
74+
insertResults?: ReadonlyMap<number, ClientInsertResult>;
75+
updateResults?: ReadonlyMap<number, ClientUpdateResult>;
76+
deleteResults?: ReadonlyMap<number, ClientDeleteResult>;
77+
}) {
78+
super();
79+
this.acknowledged = acknowledged;
80+
this.insertedCount = insertedCount;
81+
this.matchedCount = matchedCount;
82+
this.modifiedCount = modifiedCount;
83+
this.deletedCount = deletedCount;
84+
this.upsertedCount = upsertedCount;
85+
this.insertResults = insertResults;
86+
this.updateResults = updateResults;
87+
this.deleteResults = deleteResults;
88+
}
89+
}
90+
2891
@shellApiClassDefault
2992
export class BulkWriteResult extends ShellApiValueClass {
3093
acknowledged: boolean;

0 commit comments

Comments
 (0)