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

查找文档

您可以通过将 MongoCollection 对象上的 find()first() 方法链接在一起来检索集合中的单个文档。您可以将查询筛选条件传递给 find() 方法进行查询并返回集合中与筛选条件匹配的文档。如果不包含筛选条件,MongoDB 将返回集合中的所有文档。

有关使用Kotlin驾驶员查询MongoDB的更多信息,请参阅有关查询指南指南。

您还可以将其他方法链式调用至 find() 方法,例如以指定顺序组织匹配文档的 sort(),以及配置返回文档中包含的字段的 projection()

有关 sort() 方法的更多信息,请参阅我们的排序指南。有关 projection() 方法的更多信息,请参阅我们的投影指南

find() 方法返回 FindFlow 类的一个实例,这个类提供访问、组织和遍历结果的多种方法。

FindFlow 还可以从 Kotlin 协程库的委托接口Flow获取方法,例如first()firstOrNull()firstOrNull()方法返回检索结果中的第一个文档,如果没有结果,则返回nullfirst()方法返回第一个文档,如果没有文档与查询匹配,则抛出NoSuchElementException异常。

有关使用 Kotlin 驱动程序访问流中数据的更多信息,请参阅我们的“访问流中数据”指南。

以下代码片段从 movies 集合中查找单个文档。它使用以下对象和方法:

  • 传递给 find() 方法的查询筛选器eq 筛选器仅会匹配标题与 "The Room" 文本完全匹配的电影。

  • 排序,按评分以降序组织匹配的文档;因此,如果查询匹配多个文档,则返回的文档将是评分最高的文档。

  • 使用辅助方法 excludeId() 包含 titleimdb 字段中的对象并排除 _id 字段的投影

注意

该示例使用连接 URI 连接到 MongoDB 实例。如需了解有关连接到 MongoDB 实例的更多信息,请参阅连接指南

import com.mongodb.client.model.Filters.eq
import com.mongodb.client.model.Filters.lt
import com.mongodb.client.model.Projections
import com.mongodb.client.model.Sorts
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.runBlocking
import usageExamples.find.Results
data class Movie(val title: String, val runtime: Int, val imdb: IMDB) {
data class IMDB(val rating: Double)
}
data class Results(val title: String, val imdb: Movie.IMDB)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val projectionFields= Projections.fields(
Projections.include(Movie::title.name, Movie::imdb.name),
Projections.excludeId()
)
val resultsFlow = collection.withDocumentClass<Results>()
.find(eq(Movie::title.name, "The Room"))
.projection(projectionFields)
.sort(Sorts.descending("${Movie::imdb.name}.${Movie.IMDB::rating.name}"))
.firstOrNull()
if (resultsFlow == null) {
println("No results found.");
} else {
println(resultsFlow)
}
mongoClient.close()
}

有关此页面上提及的类和方法的更多信息,请参阅以下 API 文档:

  • FindFlow

  • find()

后退

查找操作