Skip to content

Commit 4b219d3

Browse files
authored
feat(NODE-6252): insertMany and bulkWrite permit readonly arrays (#4175)
1 parent 320dde0 commit 4b219d3

File tree

5 files changed

+20
-8
lines changed

5 files changed

+20
-8
lines changed

src/collection.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ export class Collection<TSchema extends Document = Document> {
292292
* @param options - Optional settings for the command
293293
*/
294294
async insertMany(
295-
docs: OptionalUnlessRequiredId<TSchema>[],
295+
docs: ReadonlyArray<OptionalUnlessRequiredId<TSchema>>,
296296
options?: BulkWriteOptions
297297
): Promise<InsertManyResult<TSchema>> {
298298
return await executeOperation(
@@ -325,7 +325,7 @@ export class Collection<TSchema extends Document = Document> {
325325
* @throws MongoDriverError if operations is not an array
326326
*/
327327
async bulkWrite(
328-
operations: AnyBulkWriteOperation<TSchema>[],
328+
operations: ReadonlyArray<AnyBulkWriteOperation<TSchema>>,
329329
options?: BulkWriteOptions
330330
): Promise<BulkWriteResult> {
331331
if (!Array.isArray(operations)) {
@@ -336,7 +336,7 @@ export class Collection<TSchema extends Document = Document> {
336336
this.client,
337337
new BulkWriteOperation(
338338
this as TODO_NODE_3286,
339-
operations as TODO_NODE_3286,
339+
operations,
340340
resolveOptions(this, options ?? { ordered: true })
341341
)
342342
);

src/operations/bulk_write.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ import { AbstractOperation, Aspect, defineAspects } from './operation';
1313
export class BulkWriteOperation extends AbstractOperation<BulkWriteResult> {
1414
override options: BulkWriteOptions;
1515
collection: Collection;
16-
operations: AnyBulkWriteOperation[];
16+
operations: ReadonlyArray<AnyBulkWriteOperation>;
1717

1818
constructor(
1919
collection: Collection,
20-
operations: AnyBulkWriteOperation[],
20+
operations: ReadonlyArray<AnyBulkWriteOperation>,
2121
options: BulkWriteOptions
2222
) {
2323
super(options);

src/operations/insert.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ export interface InsertManyResult<TSchema = Document> {
104104
export class InsertManyOperation extends AbstractOperation<InsertManyResult> {
105105
override options: BulkWriteOptions;
106106
collection: Collection;
107-
docs: Document[];
107+
docs: ReadonlyArray<Document>;
108108

109-
constructor(collection: Collection, docs: Document[], options: BulkWriteOptions) {
109+
constructor(collection: Collection, docs: ReadonlyArray<Document>, options: BulkWriteOptions) {
110110
super(options);
111111

112112
if (!Array.isArray(docs)) {

test/types/community/collection/bulkWrite.test-d.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { expectError } from 'tsd';
22

3-
import { type Collection, type Document, MongoClient, ObjectId } from '../../../mongodb';
3+
import {
4+
type AnyBulkWriteOperation,
5+
type Collection,
6+
type Document,
7+
MongoClient,
8+
ObjectId
9+
} from '../../../mongodb';
410

511
// TODO(NODE-3347): Improve these tests to use more expect assertions
612

@@ -45,6 +51,9 @@ const testDocument: TestSchema = {
4551
};
4652
const { ...testDocumentWithoutId } = testDocument;
4753

54+
const rd_array: ReadonlyArray<AnyBulkWriteOperation<TestSchema>> = [];
55+
collectionType.bulkWrite(rd_array);
56+
4857
// insertOne
4958

5059
collectionType.bulkWrite([

test/types/community/collection/insertX.test-d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ const collection = db.collection<TestModel>('testCollection');
4646
const testDoc: OptionalId<TestModelWithId> = { stringField: 'a', fruitTags: [] };
4747
expectType<Parameters<(typeof collection)['insertOne']>[0]>(testDoc);
4848

49+
const rd_array: ReadonlyArray<TestModel> = [];
50+
await collection.insertMany(rd_array);
51+
4952
const resultOne = await collection.insertOne({
5053
stringField: 'hola',
5154
fruitTags: ['Strawberry']

0 commit comments

Comments
 (0)