@@ -14,9 +14,11 @@ import java.util.*
14
14
import kotlin.test.*
15
15
16
16
// :snippet-start: bulk-data-model
17
- data class SampleDoc (
17
+ data class Person (
18
18
@BsonId val id : Int ,
19
- val x : Int? = null
19
+ val name : String ,
20
+ val age : Int? = null ,
21
+ val location : String? = null
20
22
)
21
23
// :snippet-end:
22
24
@@ -26,15 +28,16 @@ internal class BulkTest {
26
28
val config = getConfig()
27
29
val client = MongoClient .create(config.connectionUri)
28
30
val database = client.getDatabase(" sample_db" )
29
- val collection = database.getCollection<SampleDoc >(" sample_docs " )
31
+ val collection = database.getCollection<Person >(" people " )
30
32
31
33
@BeforeAll
32
34
@JvmStatic
33
35
fun beforeAll () {
34
36
runBlocking {
35
37
val sampleDocuments = listOf (
36
- SampleDoc (1 ),
37
- SampleDoc (2 )
38
+ Person (1 , " Karen Sandoval" , 31 ),
39
+ Person (2 , " William Chin" , 54 ),
40
+ Person (8 , " Shayla Ray" , 20 )
38
41
)
39
42
collection.insertMany(sampleDocuments)
40
43
}
@@ -53,16 +56,14 @@ internal class BulkTest {
53
56
@Test
54
57
fun insertOperationTest () = runBlocking {
55
58
// :snippet-start: insert-one
56
- val doc3 = InsertOneModel (SampleDoc ( 3 ))
57
- val doc4 = InsertOneModel (SampleDoc ( 4 ))
59
+ val juneDoc = InsertOneModel (Person ( 3 , " June Carrie " , 17 ))
60
+ val kevinDoc = InsertOneModel (Person ( 4 , " Kevin Moss " , 22 ))
58
61
// :snippet-end:
59
62
// :snippet-start: bulk-write-exception
60
- val doc5 = InsertOneModel (SampleDoc (1 ))
61
- val doc6 = InsertOneModel (SampleDoc (3 ))
62
63
try {
63
64
val bulkOperations = listOf (
64
- (doc5 ),
65
- (doc6 )
65
+ (InsertOneModel ( Person ( 1 , " James Smith " , 13 )) ),
66
+ (InsertOneModel ( Person ( 3 , " Colin Samuels " )) )
66
67
)
67
68
val bulkWrite = collection.bulkWrite(bulkOperations)
68
69
assertFalse(bulkWrite.wasAcknowledged()) // :remove:
@@ -72,8 +73,9 @@ internal class BulkTest {
72
73
// :snippet-end:
73
74
// Junit test for the above code
74
75
val expected = listOf (
75
- SampleDoc (1 ),
76
- SampleDoc (2 )
76
+ Person (1 , " Karen Sandoval" , 31 ),
77
+ Person (2 , " William Chin" , 54 ),
78
+ Person (8 , " Shayla Ray" , 20 )
77
79
)
78
80
assertEquals(expected, collection.find().toList())
79
81
}
@@ -82,7 +84,7 @@ internal class BulkTest {
82
84
fun replaceOneTest () = runBlocking {
83
85
// :snippet-start: replace-one
84
86
val filter = Filters .eq(" _id" , 1 )
85
- val insert = SampleDoc (1 , 4 )
87
+ val insert = Person (1 , " Celine Stork " , location = " San Diego, CA " )
86
88
val doc = ReplaceOneModel (filter, insert)
87
89
// :snippet-end:
88
90
// Junit test for the above code
@@ -94,8 +96,8 @@ internal class BulkTest {
94
96
fun updateOneTest () = runBlocking {
95
97
// :snippet-start: update-one
96
98
val filter = Filters .eq(" _id" , 2 )
97
- val update = Updates .set( SampleDoc ::x .name, 8 )
98
- val doc = UpdateOneModel <SampleDoc >(filter, update)
99
+ val update = Updates .inc( Person ::age .name, 1 )
100
+ val doc = UpdateOneModel <Person >(filter, update)
99
101
// :snippet-end:
100
102
// Junit test for the above code
101
103
val updateTest = collection.bulkWrite(listOf (doc))
@@ -105,66 +107,71 @@ internal class BulkTest {
105
107
@Test
106
108
fun deleteOneTest () = runBlocking {
107
109
// :snippet-start: delete
108
- val filter = Filters .eq(" _id" , 1 )
109
- val doc = DeleteOneModel < SampleDoc >(filter )
110
+ val deleteId1 = DeleteOneModel < Person >( Filters .eq(" _id" , 1 ) )
111
+ val deleteAgeLt30 = DeleteManyModel < Person >( Filters .lt( Person ::age.name, 30 ) )
110
112
// :snippet-end:
111
113
// Junit test for the above code
112
- val deleteTest = collection.bulkWrite(listOf (doc ))
114
+ val deleteTest = collection.bulkWrite(listOf (deleteId1, deleteAgeLt30 ))
113
115
assertTrue(deleteTest.wasAcknowledged())
114
- assertTrue(collection.find(filter).toList().isEmpty())
116
+ val expected = listOf (
117
+ Person (2 , " William Chin" , 54 ),
118
+ )
119
+ assertEquals(expected, collection.find().toList())
115
120
}
116
121
117
122
@Test
118
123
fun orderOfOperationsTest () = runBlocking {
119
124
// :snippet-start: ordered
120
- val doc1 = InsertOneModel (SampleDoc ( 3 ))
121
- val doc2 = ReplaceOneModel (
125
+ val insertMdl = InsertOneModel (Person ( 6 , " Zaynab Omar " , 37 ))
126
+ val replaceMdl = ReplaceOneModel (
122
127
Filters .eq(" _id" , 1 ),
123
- SampleDoc (1 , 2 )
128
+ Person (1 , " Sandy Kane " , location = " Helena, MT " )
124
129
)
125
- val doc3 = UpdateOneModel <SampleDoc >(
126
- Filters .eq(" _id" , 3 ),
127
- Updates .set(SampleDoc ::x .name, 2 )
130
+ val updateMdl = UpdateOneModel <Person >(
131
+ Filters .eq(" _id" , 6 ),
132
+ Updates .set(Person ::name .name, " Zaynab Hassan " )
128
133
)
129
- val doc4 = DeleteManyModel <SampleDoc >(Filters .eq( SampleDoc ::x .name, 2 ))
134
+ val deleteMdl = DeleteManyModel <Person >(Filters .gt( Person ::age .name, 50 ))
130
135
131
136
val bulkOperations = listOf (
132
- doc1 ,
133
- doc2 ,
134
- doc3 ,
135
- doc4
137
+ insertMdl ,
138
+ replaceMdl ,
139
+ updateMdl ,
140
+ deleteMdl
136
141
)
137
142
138
- val update = collection.bulkWrite(bulkOperations)
143
+ val result = collection.bulkWrite(bulkOperations)
139
144
// :snippet-end:
140
145
// Junit test for the above code
141
- assertTrue(update.wasAcknowledged())
146
+ assertTrue(result.wasAcknowledged())
147
+ collection.drop()
142
148
}
143
149
144
150
@Test
145
151
fun unorderedExecutionTest () = runBlocking {
146
- val doc1 = InsertOneModel (SampleDoc ( 3 ))
147
- val doc2 = ReplaceOneModel (
152
+ val insertMdl = InsertOneModel (Person ( 6 , " Zaynab Omar " , 37 ))
153
+ val replaceMdl = ReplaceOneModel (
148
154
Filters .eq(" _id" , 1 ),
149
- SampleDoc (1 , 2 )
155
+ Person (1 , " Sandy Kane " , location = " Helena, MT " )
150
156
)
151
- val doc3 = UpdateOneModel <SampleDoc >(
152
- Filters .eq(" _id" , 3 ),
153
- Updates .set(SampleDoc ::x .name, 2 )
154
- )
155
- val doc4 = DeleteManyModel <SampleDoc >(Filters .eq( SampleDoc ::x .name, 2 ))
157
+ val updateMdl = UpdateOneModel <Person >(
158
+ Filters .eq(" _id" , 6 ),
159
+ Updates .set(Person ::name .name, " Zaynab Hassan " )
160
+ )
161
+ val deleteMdl = DeleteManyModel <Person >(Filters .gt( Person ::age .name, 50 ))
156
162
157
163
val bulkOperations = listOf (
158
- doc1 ,
159
- doc2 ,
160
- doc3 ,
161
- doc4
164
+ insertMdl ,
165
+ replaceMdl ,
166
+ updateMdl ,
167
+ deleteMdl
162
168
)
163
169
// :snippet-start: unordered
164
170
val options = BulkWriteOptions ().ordered(false )
165
- val unorderedUpdate = collection.bulkWrite(bulkOperations, options)
171
+ val unorderedResult = collection.bulkWrite(bulkOperations, options)
166
172
// :snippet-end:
167
173
// Junit test for the above code
168
- assertTrue(unorderedUpdate.wasAcknowledged())
174
+ assertTrue(unorderedResult.wasAcknowledged())
175
+ collection.drop()
169
176
}
170
177
}
0 commit comments