Skip to content

Commit b12740d

Browse files
authored
Merge branch 'master' into DOCSP-41141-indexes
2 parents df292d3 + ffd5d1f commit b12740d

13 files changed

+1326
-2
lines changed

source/includes/read/project.kt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.example
2+
import com.mongodb.ConnectionString
3+
import com.mongodb.MongoClientSettings
4+
import com.mongodb.client.model.Filters.eq
5+
import com.mongodb.client.model.Projections
6+
import com.mongodb.kotlin.client.MongoClient
7+
import org.bson.codecs.pojo.annotations.BsonId
8+
import org.bson.types.ObjectId
9+
10+
// start-data-class
11+
data class Restaurant(
12+
@BsonId
13+
val id: ObjectId? = null,
14+
val name: String,
15+
val borough: String,
16+
val cuisine: String
17+
)
18+
// end-data-class
19+
20+
fun main() {
21+
val uri = "<connection string URI>"
22+
23+
val settings = MongoClientSettings.builder()
24+
.applyConnectionString(ConnectionString(uri))
25+
.retryWrites(true)
26+
.build()
27+
28+
val mongoClient = MongoClient.create(settings)
29+
val database = mongoClient.getDatabase("sample_restaurants")
30+
val collection = database.getCollection<Restaurant>("restaurants")
31+
32+
// start-project
33+
val projection = Projections.fields(
34+
Projections.include(
35+
Restaurant::name.name,
36+
Restaurant::cuisine.name,
37+
Restaurant::borough.name
38+
)
39+
)
40+
41+
val results = collection
42+
.find(eq(Restaurant::name.name, "Emerald Pub"))
43+
.projection(projection)
44+
45+
results.forEach { result ->
46+
println(result)
47+
}
48+
// end-project
49+
50+
// start-project-exclude
51+
val projection = Projections.fields(
52+
Projections.excludeId(),
53+
Projections.include(
54+
Restaurant::name.name,
55+
Restaurant::cuisine.name,
56+
Restaurant::borough.name
57+
)
58+
)
59+
60+
val results = collection
61+
.find(eq(Restaurant::name.name, "Emerald Pub"))
62+
.projection(projection)
63+
64+
results.forEach { result ->
65+
println(result)
66+
}
67+
// end-project-exclude
68+
}

source/includes/read/retrieve.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import com.mongodb.ConnectionString
2+
import com.mongodb.MongoClientSettings
3+
import com.mongodb.kotlin.client.*
4+
import com.mongodb.client.model.Filters.*
5+
6+
// start-data-class
7+
data class Restaurant(
8+
val name: String,
9+
val cuisine: String
10+
)
11+
// end-data-class
12+
13+
fun main() {
14+
val uri = "<connection string URI>"
15+
16+
val settings = MongoClientSettings.builder()
17+
.applyConnectionString(ConnectionString(uri))
18+
.retryWrites(true)
19+
.build()
20+
21+
val mongoClient = MongoClient.create(settings)
22+
val database = mongoClient.getDatabase("sample_restaurants")
23+
val collection = database.getCollection<Restaurant>("restaurants")
24+
25+
// start-find
26+
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish"))
27+
// end-find
28+
29+
// start-find-iterate
30+
val results = collection.find(eq(Restaurant::cuisine.name, "Spanish"))
31+
results.forEach { result ->
32+
println(result)
33+
}
34+
// end-find-iterate
35+
36+
// start-find-all
37+
val results = collection.find()
38+
// end-find-all
39+
40+
// start-modified-find
41+
val results = collection
42+
.find(eq(Restaurant::cuisine.name, "Spanish"))
43+
.limit(10)
44+
.maxTime(10000)
45+
// end-modified-find
46+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package org.example
2+
import com.mongodb.ConnectionString
3+
import com.mongodb.MongoClientSettings
4+
import com.mongodb.client.model.Filters.*
5+
import com.mongodb.kotlin.client.MongoClient
6+
import org.bson.codecs.pojo.annotations.BsonId
7+
8+
// start-data-class
9+
data class Fruit(
10+
@BsonId
11+
val id: Int,
12+
val name: String,
13+
val quantity: Int,
14+
val rating: Int,
15+
val color: String,
16+
val type: List<String>
17+
)
18+
// end-data-class
19+
20+
fun main() {
21+
// start-sample-data
22+
val uri = "<connection string URI>"
23+
24+
val settings = MongoClientSettings.builder()
25+
.applyConnectionString(ConnectionString(uri))
26+
.retryWrites(true)
27+
.build()
28+
29+
val mongoClient = MongoClient.create(settings)
30+
val database = mongoClient.getDatabase("sample_fruit")
31+
val collection = database.getCollection<Fruit>("fruits")
32+
33+
collection.insertMany(listOf(
34+
Fruit(1, "apples", 5, 3, "red", listOf("fuji", "honeycrisp")),
35+
Fruit(2, "bananas", 7, 4, "yellow", listOf("cavendish")),
36+
Fruit(3, "oranges", 6, 2, null, listOf("naval", "mandarin")),
37+
Fruit(4, "pineapples", 3, 5, "yellow", null)
38+
))
39+
// end-sample-data
40+
41+
// start-find-exact
42+
val results = collection.find(eq(Fruit::color.name, "yellow"))
43+
44+
results.forEach { result ->
45+
println(result);
46+
}
47+
// end-find-exact
48+
49+
// start-find-comparison
50+
val results = collection.find(gt(Fruit::rating.name, 2))
51+
52+
results.forEach { result ->
53+
println(result)
54+
}
55+
// end-find-comparison
56+
57+
// start-find-logical
58+
val results = collection.find(
59+
or(
60+
gt(Fruit::quantity.name, 5),
61+
eq(Fruit::color.name, "yellow")
62+
)
63+
)
64+
65+
results.forEach { result ->
66+
println(result)
67+
}
68+
// end-find-logical
69+
70+
// start-find-array
71+
val results = collection.find(size(Fruit::type.name, 2))
72+
73+
results.forEach { result ->
74+
println(result)
75+
}
76+
// end-find-array
77+
78+
// start-find-element
79+
val results = collection.find(exists(Fruit::color.name))
80+
81+
results.forEach { result ->
82+
println(result)
83+
}
84+
// end-find-element
85+
86+
// start-find-evaluation
87+
val results = collection.find(regex(Fruit::name.name, "p{2,}"))
88+
89+
results.forEach { result ->
90+
println(result)
91+
}
92+
// end-find-evaluation
93+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.example
2+
import com.mongodb.ConnectionString
3+
import com.mongodb.MongoClientSettings
4+
import com.mongodb.client.model.Filters.eq
5+
import com.mongodb.client.model.Sorts
6+
import com.mongodb.kotlin.client.MongoClient
7+
8+
// start-data-class
9+
data class Restaurant(
10+
val name: String,
11+
val borough: String,
12+
val cuisine: String
13+
)
14+
// end-data-class
15+
16+
fun main() {
17+
val uri = "<connection string URI>"
18+
19+
val settings = MongoClientSettings.builder()
20+
.applyConnectionString(ConnectionString(uri))
21+
.retryWrites(true)
22+
.build()
23+
24+
val mongoClient = MongoClient.create(settings)
25+
val database = mongoClient.getDatabase("sample_restaurants")
26+
val collection = database.getCollection<Restaurant>("restaurants")
27+
28+
// start-limit
29+
val results = collection
30+
.find(eq(Restaurant::cuisine.name, "Italian"))
31+
.limit(5)
32+
33+
results.forEach { result ->
34+
println(result)
35+
}
36+
// end-limit
37+
38+
// start-sort
39+
val results = collection
40+
.find(eq(Restaurant::cuisine.name, "Italian"))
41+
.sort(Sorts.ascending(Restaurant::name.name))
42+
43+
results.forEach { result ->
44+
println(result)
45+
}
46+
// end-sort
47+
48+
// start-skip
49+
val results = collection
50+
.find(eq(Restaurant::cuisine.name, "Italian"))
51+
.skip(10)
52+
53+
results.forEach { result ->
54+
println(result)
55+
}
56+
// end-skip
57+
58+
// start-limit-sort-skip
59+
val results = collection
60+
.find(eq(Restaurant::cuisine.name, "Italian"))
61+
.sort(Sorts.ascending(Restaurant::name.name))
62+
.skip(10)
63+
.limit(5)
64+
65+
results.forEach { result ->
66+
println(result)
67+
}
68+
// end-limit-sort-skip
69+
}

source/includes/usage-examples/sample-app.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import com.mongodb.ConnectionString
22
import com.mongodb.MongoClientSettings
3-
import com.mongodb.kotlin.client.*
43
import com.mongodb.client.model.*
4+
import com.mongodb.kotlin.client.*
55
import org.bson.Document
66

77
fun main() {
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import com.mongodb.ConnectionString
2+
import com.mongodb.MongoClientSettings
3+
import com.mongodb.client.model.*
4+
import com.mongodb.kotlin.client.*
5+
import org.bson.Document
6+
7+
fun main() {
8+
val uri = "<connection string URI>"
9+
10+
val settings = MongoClientSettings.builder()
11+
.applyConnectionString(ConnectionString(uri))
12+
.retryWrites(true)
13+
.build()
14+
15+
// Create a new client and connect to the server
16+
val mongoClient = MongoClient.create(settings)
17+
val database = mongoClient.getDatabase("<database name>")
18+
val collection = database.getCollection<Document>("<collection name>")
19+
20+
// start-insert-one
21+
val result = collection.insertOne(Document("<field name>", "<value>"))
22+
print(result.insertedId)
23+
// end-insert-one
24+
25+
// start-insert-multiple
26+
val docList = listOf(
27+
Document("<field name>", "<value>"),
28+
Document("<field name>", "<value>")
29+
)
30+
31+
val result = collection.insertMany(docList)
32+
print(result.insertedIds)
33+
// end-insert-multiple
34+
35+
// start-update-one
36+
val query = Filters.eq("<field to match>", "<value to match>")
37+
val update = Updates.set("<field name>", "<value>")
38+
39+
val result = collection.updateOne(query, update)
40+
print(result.modifiedCount)
41+
// end-update-one
42+
43+
// start-update-multiple
44+
val query = Filters.eq("<field to match>", "<value to match>")
45+
val update = Updates.set("<field name>", "<value>")
46+
47+
val result = collection.updateMany(query, update)
48+
print(result.modifiedCount)
49+
// end-update-multiple
50+
51+
// start-replace-one
52+
val query = Filters.eq("<field to match>", "<value to match>")
53+
val replacement = Document("<new document field name>", "<new document value>")
54+
55+
val result = collection.replaceOne(query, replacement)
56+
print(result.modifiedCount)
57+
// end-replace-one
58+
59+
// start-delete-one
60+
val query = Filters.eq("<field to match>", "<value to match>")
61+
62+
val result = collection.deleteOne(query)
63+
print(result.deletedCount)
64+
// end-delete-one
65+
66+
// start-delete-multiple
67+
val query = Filters.eq("<field to match>", "<value to match>")
68+
69+
val result = collection.deleteMany(query)
70+
print(result.deletedCount)
71+
// end-delete-multiple
72+
73+
// start-bulk-write
74+
val bulkOps = listOf(
75+
InsertOneModel(Document("<field name>", "<value>")),
76+
UpdateOneModel(
77+
Filters.eq("<field to match>", "<value to match>"),
78+
Updates.set("<field name>", "<value>")),
79+
DeleteOneModel(Filters.eq("<field to match>", "<value to match>"))
80+
)
81+
82+
val result = collection.bulkWrite(bulkOps)
83+
print(result)
84+
// end-bulk-write
85+
}

source/index.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
.. toctree::
1515

16+
/write-operations
1617
/read
1718
/indexes
1819
/faq
@@ -58,6 +59,16 @@ Quick Reference
5859
See driver syntax examples for common MongoDB commands in the
5960
:ref:`Quick Reference <kotlin-sync-quick-reference>` section.
6061

62+
Write Data to MongoDB
63+
---------------------
64+
65+
Learn how you can write data to MongoDB in the :ref:`kotlin-sync-write` section.
66+
67+
Read Data from MongoDB
68+
----------------------
69+
70+
Learn how you can retrieve data from MongoDB in the :ref:`kotlin-sync-read` section.
71+
6172
FAQ
6273
---
6374

0 commit comments

Comments
 (0)