diff --git a/driver-multiplatform/src/commonMain/kotlin/MultiplatformMongoCollectionImpl.kt b/driver-multiplatform/src/commonMain/kotlin/MultiplatformMongoCollectionImpl.kt index 35c98639..e8b9a946 100644 --- a/driver-multiplatform/src/commonMain/kotlin/MultiplatformMongoCollectionImpl.kt +++ b/driver-multiplatform/src/commonMain/kotlin/MultiplatformMongoCollectionImpl.kt @@ -381,7 +381,34 @@ internal class MultiplatformMongoCollectionImpl( } override suspend fun bulkWrite(options: BulkWriteOptions.() -> Unit, filter: FilterQuery.() -> Unit, operations: BulkWrite.() -> Unit) { - TODO("Not yet implemented") + val model = BulkWrite( + context = database.client.context, + documentType = type, + globalFilter = filter, + ).apply { + this.options.options() + this.operations() + } + + val message = database.client.wire.sendSingle( + database.client.createOpMsg { + document { + writeInt32("bulkWrite", 1) + writeString($$"$db", "admin") // Hard-coded, mandatory + + writeArray("nsInfo") { + writeDocument { + writeString("ns", fullyQualifiedName) + } + } + + model.writeTo(this) + } + } + ) + + message as Message.OpMsg + check(message.body.document["ok"]?.decodeDouble() == 1.0) } override suspend fun updateManyWithPipeline(options: UpdateOptions.() -> Unit, filter: FilterQuery.() -> Unit, update: UpdateWithPipelineQuery.() -> Unit): UpdateOperations.UpdateResult { diff --git a/dsl-template/src/commonMain/kotlin/command/BulkWrite.kt b/dsl-template/src/commonMain/kotlin/command/BulkWrite.kt index 22371fe8..c33480e1 100644 --- a/dsl-template/src/commonMain/kotlin/command/BulkWrite.kt +++ b/dsl-template/src/commonMain/kotlin/command/BulkWrite.kt @@ -478,8 +478,6 @@ class BulkWrite private constructor( } override fun write(writer: BsonFieldWriter) = with(writer) { - writeInt32("bulkWrite", 1) - writeArray("ops") { for (operation in _operations) { writeDocument { diff --git a/dsl/src/commonMain/kotlin/command/BulkWrite.kt b/dsl/src/commonMain/kotlin/command/BulkWrite.kt index 2a2ebb16..bb076a1d 100644 --- a/dsl/src/commonMain/kotlin/command/BulkWrite.kt +++ b/dsl/src/commonMain/kotlin/command/BulkWrite.kt @@ -481,8 +481,6 @@ class BulkWrite private constructor( } override fun write(writer: BsonFieldWriter) = with(writer) { - writeInt32("bulkWrite", 1) - writeArray("ops") { for (operation in _operations) { writeDocument { diff --git a/dsl/src/commonTest/kotlin/command/BulkWriteTest.kt b/dsl/src/commonTest/kotlin/command/BulkWriteTest.kt index b6f78271..586b3c95 100644 --- a/dsl/src/commonTest/kotlin/command/BulkWriteTest.kt +++ b/dsl/src/commonTest/kotlin/command/BulkWriteTest.kt @@ -65,7 +65,6 @@ val BulkWriteTest by multiContextSuite { } } shouldBeBson $$""" { - "bulkWrite": 1, "ops": [ { "update": 0, diff --git a/test/src/commonMain/kotlin/operations/UpdateOperations.test.kt b/test/src/commonMain/kotlin/operations/UpdateOperations.test.kt index b598cf54..030651a7 100644 --- a/test/src/commonMain/kotlin/operations/UpdateOperations.test.kt +++ b/test/src/commonMain/kotlin/operations/UpdateOperations.test.kt @@ -169,7 +169,7 @@ fun SuiteDsl.verifyUpdateOperations( check(result.age == 40) } - test("Bulk write") { + test("Bulk write", Ignored) { // TODO re-enable in MongoDB 8.x when featureFlagBulkWriteCommand is enabled by default collection().insertMany( UpdateOperationsUser( _id = collection().newId(),