Docs 菜单
Docs 主页
/ / /
Kotlin 协程
/

数据库和集合

在此页面上

  • Overview
  • 访问数据库
  • 访问集合
  • 指定返回类型
  • 创建集合
  • 文档验证
  • 获取集合列表
  • 删除集合
  • 指定读取偏好、读关注和写关注

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

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

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

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

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

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

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

使用 getDatabase() MongoClientMongoDatabase实例的方法来访问权限MongoDB实例中的 。

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

val database = client.getDatabase("testDatabase")

使用 getCollection() MongoDatabase实例的方法,用于访问已连接MongoCollection MongoDB 实例的数据库中的 。

以下示例从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])

使用 createCollection() MongoDatabase实例的方法,用于在已连接MongoDB实例的数据库中创建集合。

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

database.createCollection("exampleCollection")

您可以使用 CreateCollectionOptions 指定集合选项,例如最大大小和文档验证规则。 类。createCollection()方法接受CreateCollectionOptions实例作为可选的第二个参数。

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

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()

警告

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

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

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

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

提示

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

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

后退

Stable API