对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

数据库和集合

在本指南中,您可以了解如何通过 MongoDB Kotlin 驱动程序使用 MongoDB 数据库和 collection。

MongoDB 将数据组织成以下级别的层次结构:

  1. 数据库:数据库是 MongoDB 实例中数据组织的最高级别。

  2. collection:数据库被组织成包含文档的collection。

  3. 文档:文档包含字符串、数字和日期等字面数据以及其他嵌入式文档。 有关文档字段类型和结构的更多信息,请参阅有关文档的服务器文档。

借助MongoDB Kotlin驱动程序,您可以使用Kotlin数据类或使用 文档 类对数据进行建模,以便在MongoDB中存储和检索数据。

要了解有关使用数据类的更多信息,请参阅数据类数据格式指南。 要了解有关使用Document类的更多信息,请参阅文档数据格式指南。

Use the getDatabase() method on a MongoClient instance to access a MongoDatabase in a MongoDB instance.

以下示例将访问名为testDatabase的数据库:

val database = client.getDatabase("testDatabase")

Use the getCollection() method of a MongoDatabase instance to access a MongoCollection in a database of your connected MongoDB instance.

以下示例从MongoDatabase访问名为testCollection的collection,其中包含类型为ExampleDataClass的文档:

ExampleDataClass Realm 数据模型
data class ExampleDataClass(
@BsonId val id: ObjectId = ObjectId(),
val exampleProperty: String,
)
val collection = database.getCollection<ExampleDataClass>("testCollection")

提示

如果提供的集合名称在数据库中尚不存在,则当您首次将数据插入该集合时,MongoDB 会隐式创建该集合。

该驱动程序提供了一种为从集合返回的文档指定类的方法,即使该类与检索集合时指定的类不同。您可以指定返回类,方法是使用 MongoCollection.withDocumentClass()方法。

在以下情况下,指定不同的返回类可能很有用:

  • 您的collection包含多种数据类型。

  • 您可以指定一个会更改数据字段的投影。

  • 您不能直接指定更改数据的方法的返回类型,例如findOneAndUpdate()findOneAndReplace()

以下示例检索一个包含由Fruit数据类表示的数据的collection,但将findOneAndUpdate()操作的结果作为实例的NewFruit类返回。该操作将qty字段的名称更改为quantity ,并向文档中的seasons数组字段添加一个name值为"strawberry"的项目:

水果Realm 数据模型
data class Fruit(
@BsonId val id: Int,
val name: String,
val qty: Int,
val seasons: List<String>
)
val collection =
database.getCollection<Fruit>("fruits")
// Define a data class for returned documents
data class NewFruit(
@BsonId val id: Int,
val name: String,
val quantity: Int,
val seasons: List<String>
)
val filter = Filters.eq(Fruit::name.name, "strawberry")
val update = Updates.combine(
Updates.rename(Fruit::qty.name, "quantity"),
Updates.push(Fruit::seasons.name, "fall"),
)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
// Specify the class for returned documents as the type parameter in withDocumentClass()
val result = collection
.withDocumentClass<NewFruit>()
.findOneAndUpdate(filter, update, options)
println(result)
NewFruit(id=1, name=strawberry, quantity=205, seasons=[summer, fall])

Use the createCollection() method of a MongoDatabase instance to create a collection in a database of your connected MongoDB instance.

以下示例创建了一个名为exampleCollection的collection:

database.createCollection("exampleCollection")

You can specify collection options like maximum size and document validation rules using the CreateCollectionOptions class. The createCollection() method accepts an instance of CreateCollectionOptions as an optional second parameter.

文档验证提供了在写入集合期间根据一系列筛选器验证文档的能力。您可以使用 ValidationOptions 类指定这些筛选器,该类接受一系列指定验证规则和表达式的 Filters 实例:

val collOptions: ValidationOptions = ValidationOptions().validator(
Filters.or(
Filters.exists("title"),
Filters.exists("name")
)
)
database.createCollection(
"movies",
CreateCollectionOptions().validationOptions(collOptions)
)

有关更多信息,请参阅服务器文档中的文档验证

你可以使用 MongoDatabase.listCollectionNames() 方法查询数据库中的集合方法:

val collectionList = database.listCollectionNames().toList()
println(collectionList)
[movies, exampleCollection]

您可以使用 MongoCollection.drop() 方法:

val collection =
database.getCollection<ExampleDataClass>("movies")
collection.drop()

警告

删除集合会删除该集合中的所有数据

从数据库删除集合,还会永久删除该集合中的所有文档以及该集合上的所有索引。仅删除包含不再需要的数据的集合。

您可以使用 MongoDatabase.drop() 从您的 MongoDB 部署中删除数据库方法,如以下示例所示:

val database = mongoClient.getDatabase("testDatabase")
database.drop()

警告

删除数据库会删除数据库中的所有数据

删除数据库会永久删除该数据库中的所有集合、文档和索引。

仅当不再需要数据库中的数据时才删除数据库。

读取偏好读关注写关注可控制驱动程序如何路由读操作,以及在连接 MongoDB 副本集时如何等待读写操作的确认。读取偏好和读关注适用于所有读操作;写关注适用于所有写操作。

MongoDatabase 实例从创建它们的 MongoClient 继承写关注、读关注和写入偏好设置。MongoCollection 实例从创建它们的 MongoDatabase 继承写关注、读关注和写入偏好设置。不过,您可以使用以下方法获取 MongoDatabaseMongoCollection 的实例,该实例的读取偏好、读关注或写关注与其通常继承的设置有所不同:

提示

withReadConcern()withReadPreference()withWriteConcern 方法创建具有所需偏好或关注的 MongoDatabaseMongoCollection 的新实例。调用该方法的 MongoDatabaseMongoCollection 将保留其原有的偏好和关注设置。

有关这些主题的更多信息,请参阅服务器手册中的以下页面: