Skip to content

Commit 36f12bf

Browse files
authored
(DOCSP-29227) Databases and Collections page (#40)
# Pull Request Info [PR Reviewing Guidelines](https://github.com/mongodb/docs-java/blob/master/REVIEWING.md) JIRA - https://jira.mongodb.org/browse/DOCSP-29227 Staging - https://docs-mongodbcom-staging.corp.mongodb.com/kotlin/docsworker-xlarge/docsp-29227-dbs-collections/fundamentals/databases-collections/ # Updated Page Fundamentals > [Databases and Collections page](https://www.mongodb.com/docs/drivers/java/sync/current/fundamentals/databases-collections/) ## Self-Review Checklist - [ ] Is this free of any warnings or errors in the RST? - [ ] Did you run a spell-check? - [ ] Did you run a grammar-check? - [ ] Are all the links working?
1 parent bb0fef1 commit 36f12bf

9 files changed

+156
-49
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
2+
import com.mongodb.client.model.CreateCollectionOptions
3+
import com.mongodb.client.model.Filters
4+
import com.mongodb.client.model.ValidationOptions
5+
import com.mongodb.kotlin.client.coroutine.MongoClient
6+
import io.github.cdimascio.dotenv.dotenv
7+
import kotlinx.coroutines.flow.toList
8+
import kotlinx.coroutines.runBlocking
9+
import org.bson.codecs.pojo.annotations.BsonId
10+
import org.bson.types.ObjectId
11+
import org.junit.jupiter.api.AfterAll
12+
import org.junit.jupiter.api.Test
13+
import org.junit.jupiter.api.TestInstance
14+
import kotlin.test.assertTrue
15+
16+
17+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
18+
internal class DatabaseCollectionsTest {
19+
// :snippet-start: test-data-class
20+
data class ExampleDataClass(
21+
@BsonId val id: ObjectId = ObjectId(),
22+
val exampleProperty: String,
23+
)
24+
// :snippet-end:
25+
companion object {
26+
val dotenv = dotenv()
27+
val client = MongoClient.create(dotenv["MONGODB_CONNECTION_URI"])
28+
// :snippet-start: access-database
29+
val database = client.getDatabase("testDatabase")
30+
// :snippet-end:
31+
// :snippet-start: access-collection
32+
val collection = database.getCollection<ExampleDataClass>("testCollection")
33+
// :snippet-end:
34+
35+
@JvmStatic
36+
@AfterAll
37+
fun afterAll(): Unit = runBlocking {
38+
database.drop()
39+
client.close()
40+
}
41+
}
42+
43+
@Test
44+
fun createExampleCollectionTest() = runBlocking {
45+
// :snippet-start: create-collection
46+
database.createCollection("exampleCollection")
47+
// :snippet-end:
48+
// Junit test for the above code
49+
val collectionList = database.listCollectionNames().toList()
50+
assertTrue(collectionList.contains("exampleCollection"))
51+
}
52+
53+
@Test
54+
fun listCollectionTest() = runBlocking {
55+
database.createCollection("movies")
56+
// :snippet-start: get-collections
57+
val collectionList = database.listCollectionNames().toList()
58+
println(collectionList)
59+
// :snippet-end:
60+
// :snippet-start: drop-collections
61+
val collection =
62+
database.getCollection<ExampleDataClass>("movies")
63+
collection.drop()
64+
// :snippet-end:
65+
// Junit test for the above code
66+
assertTrue(collectionList.contains("exampleCollection"))
67+
68+
}
69+
70+
@Test
71+
fun validationTest() = runBlocking {
72+
// :snippet-start: validation
73+
val collOptions: ValidationOptions = ValidationOptions().validator(
74+
Filters.or(
75+
Filters.exists("title"),
76+
Filters.exists("name")
77+
)
78+
)
79+
database.createCollection(
80+
"movies",
81+
CreateCollectionOptions().validationOptions(collOptions)
82+
)
83+
// :snippet-end:
84+
// Junit test for the above code
85+
val collectionList = database.listCollectionNames().toList()
86+
assertTrue(collectionList.contains("movies"))
87+
}
88+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
val collection = database.getCollection<ExampleDataClass>("testCollection")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
val database = client.getDatabase("testDatabase")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
database.createCollection("exampleCollection")
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
val collection =
2+
database.getCollection<ExampleDataClass>("movies")
3+
collection.drop()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
val collectionList = database.listCollectionNames().toList()
2+
println(collectionList)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
data class ExampleDataClass(
2+
@BsonId val id: ObjectId = ObjectId(),
3+
val exampleProperty: String,
4+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
val collOptions: ValidationOptions = ValidationOptions().validator(
2+
Filters.or(
3+
Filters.exists("title"),
4+
Filters.exists("name")
5+
)
6+
)
7+
database.createCollection(
8+
"movies",
9+
CreateCollectionOptions().validationOptions(collOptions)
10+
)

source/fundamentals/databases-collections.txt

Lines changed: 46 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -14,53 +14,54 @@ Overview
1414
--------
1515

1616
In this guide, you can learn how to use MongoDB databases and
17-
collections with the MongoDB Java driver.
17+
collections with the MongoDB Kotlin driver.
1818

19-
MongoDB organizes data into a hierachy of the following levels:
19+
MongoDB organizes data into a hierarchy of the following levels:
2020

21-
- Databases
21+
#. **Databases**: Databases are the top level of data organization in a MongoDB instance.
2222

23-
- Collections
23+
#. **Collections**: Databases are organized into collections which contain **documents**.
2424

25-
- Documents
25+
#. **Documents**: Documents contain literal data such as strings, numbers, and dates, as well as other embedded documents. For more information on document field types and structure, see the :manual:`server documentation for documents </core/document/>`.
2626

27-
Databases are the top level of data organization in a MongoDB instance.
28-
Databases are organized into collections which contain **documents**.
29-
Documents
30-
contain literal data such as strings, numbers, and dates as well as
31-
other (embedded) documents. For more information on document field
32-
types and structure, see the server documentation for
33-
:manual:`documents </core/document/>`.
27+
With the MongoDB Kotlin driver, data can be modeled using Kotlin data classes or you can use a
28+
`Document <{+api+}/apidocs/bson/org/bson/Document.html>`__ class
29+
to store and retrieve data from MongoDB.
30+
31+
.. TODO:(DOCSP-29224): add back in when document data format data classes are documented
32+
.. To learn more about using data classes to store and retrieve data, refer to
33+
.. :ref:`Document Data Format: Data Classes <fundamentals-data-classes>`.
3434

3535
Access a Database
3636
-----------------
3737

3838
Use the `getDatabase()
39-
<{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html#getDatabase(java.lang.String)>`__ method of
39+
<{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-client/get-database.html>`__ method of
4040
a ``MongoClient`` instance to access a ``MongoDatabase`` in a MongoDB
4141
instance.
4242

4343
The following example accesses a database named "testDatabase":
4444

45-
.. code-block:: java
46-
47-
MongoDatabase database = mongoClient.getDatabase("testDatabase");
45+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.access-database.kt
46+
:language: kotlin
4847

4948
Access a Collection
5049
-------------------
5150

5251
Use the `getCollection()
53-
<{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#getCollection(java.lang.String)>`__
52+
<{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/get-collection.html>`__
5453
method of a ``MongoDatabase`` instance to access a
5554
``MongoCollection`` in a database of your connected MongoDB instance.
5655

57-
The following example accesses a collection named "testCollection" from
58-
a ``MongoDatabase``:
56+
The following example accesses a collection named "testCollection" from a
57+
``MongoDatabase`` that contains documents of type ``ExampleDataClass``:
5958

60-
.. code-block:: java
59+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.test-data-class.kt
60+
:language: kotlin
61+
:caption: ExampleDataClass data model
6162

62-
MongoDatabase database = mongoClient.getDatabase("testDatabase");
63-
MongoCollection<Document> collection = database.getCollection("testCollection");
63+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.access-collection.kt
64+
:language: kotlin
6465

6566
.. tip::
6667

@@ -72,16 +73,14 @@ Create a Collection
7273
-------------------
7374

7475
Use the `createCollection()
75-
<{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#createCollection(java.lang.String,com.mongodb.client.model.CreateCollectionOptions)>`__
76+
<{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/create-collection.html>`__
7677
method of a ``MongoDatabase`` instance to create a collection
7778
in a database of your connected MongoDB instance.
7879

7980
The following example creates a collection called "exampleCollection":
8081

81-
82-
.. code-block:: java
83-
84-
database.createCollection("exampleCollection");
82+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.create-collection.kt
83+
:language: kotlin
8584

8685
You can specify collection options like maximum size and document
8786
validation rules using the `CreateCollectionOptions
@@ -100,12 +99,8 @@ class, which accepts a series of `Filters
10099
<{+api+}/apidocs/mongodb-driver-core/com/mongodb/client/model/Filters.html>`__
101100
that specifies the validation rules and expressions:
102101

103-
.. code-block:: java
104-
105-
ValidationOptions collOptions = new ValidationOptions().validator(
106-
Filters.or(Filters.exists("commander"), Filters.exists("first officer")));
107-
database.createCollection("ships",
108-
new CreateCollectionOptions().validationOptions(collOptions));
102+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.validation.kt
103+
:language: kotlin
109104

110105
For more information, see the server documentation for :manual:`document
111106
validation </core/document-validation>`.
@@ -115,25 +110,27 @@ Get a List of Collections
115110

116111
You can query for a list of collections in a database using the
117112
`MongoDatabase.listCollectionNames()
118-
<{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#listCollectionNames()>`__ method:
113+
<{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/list-collection-names.html>`__ method:
114+
115+
.. io-code-block::
119116

120-
.. code-block:: java
117+
.. input:: /examples/generated/DatabaseCollectionsTest.snippet.get-collections.kt
118+
:language: kotlin
121119

122-
for (String name : database.listCollectionNames()) {
123-
System.out.println(name);
124-
}
120+
.. output::
121+
:language: console
122+
123+
[movies, exampleCollection]
125124

126125
Drop a Collection
127126
-----------------
128127

129128
You can remove a collection from the database using the
130129
`MongoCollection.drop()
131-
<{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#drop()>`__ method:
132-
133-
.. code-block:: java
130+
<{+api-kotlin+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#drop()>`__ method:
134131

135-
MongoCollection<Document> collection = database.getCollection("bass");
136-
collection.drop();
132+
.. literalinclude:: /examples/generated/DatabaseCollectionsTest.snippet.drop-collections.kt
133+
:language: kotlin
137134

138135
.. warning:: Dropping a Collection Deletes All Data in the Collection
139136

@@ -161,17 +158,17 @@ of a ``MongoDatabase`` or ``MongoCollection`` with a read preference,
161158
read concern, or write concern that differs from the setting they would
162159
normally inherit:
163160

164-
- `MongoDatabase.withReadConcern() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#withReadConcern(com.mongodb.ReadConcern)>`__
161+
- `MongoDatabase.withReadConcern() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/with-read-concern.html>`__
165162

166-
- `MongoDatabase.withReadPreference() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#withReadPreference(com.mongodb.ReadPreference)>`__
163+
- `MongoDatabase.withReadPreference() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/with-read-preference.html>`__
167164

168-
- `MongoDatabase.withWriteConcern() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html#withWriteConcern(com.mongodb.WriteConcern)>`__
165+
- `MongoDatabase.withWriteConcern() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-database/with-write-concern.html>`__
169166

170-
- `MongoCollection.withReadConcern() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#withReadConcern(com.mongodb.ReadConcern)>`__
167+
- `MongoCollection.withReadConcern() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-collection/with-read-concern.html>`__
171168

172-
- `MongoCollection.withReadPreference() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#withReadPreference(com.mongodb.ReadPreference)>`__
169+
- `MongoCollection.withReadPreference() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-collection/with-read-preference.html>`__
173170

174-
- `MongoCollection.withWriteConcern() <{+api+}/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#withWriteConcern(com.mongodb.WriteConcern)>`__
171+
- `MongoCollection.withWriteConcern() <{+api-kotlin+}/apidocs/mongodb-driver-kotlin-coroutine/mongodb-driver-kotlin-coroutine/com.mongodb.kotlin.client.coroutine/-mongo-collection/with-write-concern.html>`__
175172

176173
.. tip::
177174

0 commit comments

Comments
 (0)