Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 54 additions & 47 deletions examples/src/test/kotlin/BulkTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ import java.util.*
import kotlin.test.*

// :snippet-start: bulk-data-model
data class SampleDoc(
data class Person(
@BsonId val id: Int,
val x: Int? = null
val name: String,
val age: Int? = null,
val location: String? = null
)
// :snippet-end:

Expand All @@ -26,15 +28,16 @@ internal class BulkTest {
val config = getConfig()
val client = MongoClient.create(config.connectionUri)
val database = client.getDatabase("sample_db")
val collection = database.getCollection<SampleDoc>("sample_docs")
val collection = database.getCollection<Person>("people")

@BeforeAll
@JvmStatic
fun beforeAll() {
runBlocking {
val sampleDocuments = listOf(
SampleDoc(1),
SampleDoc(2)
Person(1, "Karen Sandoval", 31),
Person(2, "William Chin", 54),
Person(8, "Shayla Ray", 20)
)
collection.insertMany(sampleDocuments)
}
Expand All @@ -53,16 +56,14 @@ internal class BulkTest {
@Test
fun insertOperationTest() = runBlocking {
// :snippet-start: insert-one
val doc3 = InsertOneModel(SampleDoc(3))
val doc4 = InsertOneModel(SampleDoc(4))
val juneDoc = InsertOneModel(Person(3, "June Carrie", 17))
val kevinDoc = InsertOneModel(Person(4, "Kevin Moss", 22))
// :snippet-end:
// :snippet-start: bulk-write-exception
val doc5 = InsertOneModel(SampleDoc(1))
val doc6 = InsertOneModel(SampleDoc(3))
try {
val bulkOperations = listOf(
(doc5),
(doc6)
(InsertOneModel(Person(1, "James Smith", 13))),
(InsertOneModel(Person(3, "Colin Samuels")))
)
val bulkWrite = collection.bulkWrite(bulkOperations)
assertFalse(bulkWrite.wasAcknowledged()) // :remove:
Expand All @@ -72,8 +73,9 @@ internal class BulkTest {
// :snippet-end:
// Junit test for the above code
val expected = listOf(
SampleDoc(1),
SampleDoc(2)
Person(1, "Karen Sandoval", 31),
Person(2, "William Chin", 54),
Person(8, "Shayla Ray", 20)
)
assertEquals(expected, collection.find().toList())
}
Expand All @@ -82,7 +84,7 @@ internal class BulkTest {
fun replaceOneTest() = runBlocking {
// :snippet-start: replace-one
val filter = Filters.eq("_id", 1)
val insert = SampleDoc(1, 4)
val insert = Person(1, "Celine Stork", location = "San Diego, CA")
val doc = ReplaceOneModel(filter, insert)
// :snippet-end:
// Junit test for the above code
Expand All @@ -94,8 +96,8 @@ internal class BulkTest {
fun updateOneTest() = runBlocking {
// :snippet-start: update-one
val filter = Filters.eq("_id", 2)
val update = Updates.set(SampleDoc::x.name, 8)
val doc = UpdateOneModel<SampleDoc>(filter, update)
val update = Updates.inc(Person::age.name, 1)
val doc = UpdateOneModel<Person>(filter, update)
// :snippet-end:
// Junit test for the above code
val updateTest = collection.bulkWrite(listOf(doc))
Expand All @@ -105,66 +107,71 @@ internal class BulkTest {
@Test
fun deleteOneTest() = runBlocking {
// :snippet-start: delete
val filter = Filters.eq("_id", 1)
val doc = DeleteOneModel<SampleDoc>(filter)
val deleteId1 = DeleteOneModel<Person>(Filters.eq("_id", 1))
val deleteAgeLt30 = DeleteManyModel<Person>(Filters.lt(Person::age.name, 30))
// :snippet-end:
// Junit test for the above code
val deleteTest = collection.bulkWrite(listOf(doc))
val deleteTest = collection.bulkWrite(listOf(deleteId1, deleteAgeLt30))
assertTrue(deleteTest.wasAcknowledged())
assertTrue(collection.find(filter).toList().isEmpty())
val expected = listOf(
Person(2, "William Chin", 54),
)
assertEquals(expected, collection.find().toList())
}

@Test
fun orderOfOperationsTest() = runBlocking {
// :snippet-start: ordered
val doc1= InsertOneModel(SampleDoc(3))
val doc2 = ReplaceOneModel(
val insertMdl = InsertOneModel(Person(6, "Zaynab Omar", 37))
val replaceMdl = ReplaceOneModel(
Filters.eq("_id", 1),
SampleDoc(1, 2)
Person(1, "Sandy Kane", location = "Helena, MT")
)
val doc3 = UpdateOneModel<SampleDoc>(
Filters.eq("_id", 3),
Updates.set(SampleDoc::x.name, 2)
val updateMdl = UpdateOneModel<Person>(
Filters.eq("_id", 6),
Updates.set(Person::name.name, "Zaynab Hassan")
)
val doc4 = DeleteManyModel<SampleDoc>(Filters.eq(SampleDoc::x.name, 2))
val deleteMdl = DeleteManyModel<Person>(Filters.gt(Person::age.name, 50))

val bulkOperations = listOf(
doc1,
doc2,
doc3,
doc4
insertMdl,
replaceMdl,
updateMdl,
deleteMdl
)

val update = collection.bulkWrite(bulkOperations)
val result = collection.bulkWrite(bulkOperations)
// :snippet-end:
// Junit test for the above code
assertTrue(update.wasAcknowledged())
assertTrue(result.wasAcknowledged())
collection.drop()
}

@Test
fun unorderedExecutionTest() = runBlocking {
val doc1 = InsertOneModel(SampleDoc(3))
val doc2 = ReplaceOneModel(
val insertMdl = InsertOneModel(Person(6, "Zaynab Omar", 37))
val replaceMdl = ReplaceOneModel(
Filters.eq("_id", 1),
SampleDoc(1, 2)
Person(1, "Sandy Kane", location = "Helena, MT")
)
val doc3 = UpdateOneModel<SampleDoc>(
Filters.eq("_id", 3),
Updates.set(SampleDoc::x.name, 2)
)
val doc4 = DeleteManyModel<SampleDoc>(Filters.eq(SampleDoc::x.name, 2))
val updateMdl = UpdateOneModel<Person>(
Filters.eq("_id", 6),
Updates.set(Person::name.name, "Zaynab Hassan")
)
val deleteMdl = DeleteManyModel<Person>(Filters.gt(Person::age.name, 50))

val bulkOperations = listOf(
doc1,
doc2,
doc3,
doc4
insertMdl,
replaceMdl,
updateMdl,
deleteMdl
)
// :snippet-start: unordered
val options = BulkWriteOptions().ordered(false)
val unorderedUpdate = collection.bulkWrite(bulkOperations, options)
val unorderedResult = collection.bulkWrite(bulkOperations, options)
// :snippet-end:
// Junit test for the above code
assertTrue(unorderedUpdate.wasAcknowledged())
assertTrue(unorderedResult.wasAcknowledged())
collection.drop()
}
}
2 changes: 1 addition & 1 deletion snooty.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ driver = "kotlin"
driver-short = "Kotlin driver"
driver-long = "MongoDB Kotlin Driver"
version = "4.10"
full-version = "4.10.1"
full-version = "{+version+}.1"
mdb-server = "MongoDB server"
kotlin-docs = "https://kotlinlang.org/docs"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
data class SampleDoc(
data class Person(
@BsonId val id: Int,
val x: Int? = null
val name: String,
val age: Int? = null,
val location: String? = null
)
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
val doc5 = InsertOneModel(SampleDoc(1))
val doc6 = InsertOneModel(SampleDoc(3))
try {
val bulkOperations = listOf(
(doc5),
(doc6)
(InsertOneModel(Person(1, "James Smith", 13))),
(InsertOneModel(Person(3, "Colin Samuels")))
)
val bulkWrite = collection.bulkWrite(bulkOperations)
} catch (e: MongoBulkWriteException) {
Expand Down
4 changes: 2 additions & 2 deletions source/examples/generated/BulkTest.snippet.delete.kt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
val filter = Filters.eq("_id", 1)
val doc = DeleteOneModel<SampleDoc>(filter)
val deleteId1 = DeleteOneModel<Person>(Filters.eq("_id", 1))
val deleteAgeLt30 = DeleteManyModel<Person>(Filters.lt(Person::age.name, 30))
4 changes: 2 additions & 2 deletions source/examples/generated/BulkTest.snippet.insert-one.kt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
val doc3 = InsertOneModel(SampleDoc(3))
val doc4 = InsertOneModel(SampleDoc(4))
val juneDoc = InsertOneModel(Person(3, "June Carrie", 17))
val kevinDoc = InsertOneModel(Person(4, "Kevin Moss", 22))
24 changes: 12 additions & 12 deletions source/examples/generated/BulkTest.snippet.ordered.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
val doc1= InsertOneModel(SampleDoc(3))
val doc2 = ReplaceOneModel(
val insertMdl = InsertOneModel(Person(6, "Zaynab Omar", 37))
val replaceMdl = ReplaceOneModel(
Filters.eq("_id", 1),
SampleDoc(1, 2)
Person(1, "Sandy Kane", location = "Helena, MT")
)
val doc3 = UpdateOneModel<SampleDoc>(
Filters.eq("_id", 3),
Updates.set(SampleDoc::x.name, 2)
val updateMdl = UpdateOneModel<Person>(
Filters.eq("_id", 6),
Updates.set(Person::name.name, "Zaynab Hassan")
)
val doc4 = DeleteManyModel<SampleDoc>(Filters.eq(SampleDoc::x.name, 2))
val deleteMdl = DeleteManyModel<Person>(Filters.gt(Person::age.name, 50))

val bulkOperations = listOf(
doc1,
doc2,
doc3,
doc4
insertMdl,
replaceMdl,
updateMdl,
deleteMdl
)

val update = collection.bulkWrite(bulkOperations)
val result = collection.bulkWrite(bulkOperations)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
val filter = Filters.eq("_id", 1)
val insert = SampleDoc(1, 4)
val insert = Person(1, "Celine Stork", location = "San Diego, CA")
val doc = ReplaceOneModel(filter, insert)
2 changes: 1 addition & 1 deletion source/examples/generated/BulkTest.snippet.unordered.kt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
val options = BulkWriteOptions().ordered(false)
val unorderedUpdate = collection.bulkWrite(bulkOperations, options)
val unorderedResult = collection.bulkWrite(bulkOperations, options)
4 changes: 2 additions & 2 deletions source/examples/generated/BulkTest.snippet.update-one.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
val filter = Filters.eq("_id", 2)
val update = Updates.set(SampleDoc::x.name, 8)
val doc = UpdateOneModel<SampleDoc>(filter, update)
val update = Updates.inc(Person::age.name, 1)
val doc = UpdateOneModel<Person>(filter, update)
Loading