文档菜单
文档首页
/ / /
Kotlin 协程
/ /

查找文档

您可以通过在MongoCollection对象上链式调用find()first()方法来检索集合中的单个文档。您可以将查询过滤器传递给find()方法,以查询并返回与过滤器匹配的文档。如果不包括过滤器,MongoDB将返回集合中的所有文档。

有关使用Kotlin驱动程序查询MongoDB的更多信息,请参阅我们的查询文档指南.

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

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

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

FindFlow还从其代理接口Flow(来自Kotlin Coroutines库)中获取方法,例如first()firstOrNull()。如果检索到的结果中没有结果,则firstOrNull()方法返回第一个文档或返回null。如果没有任何文档匹配查询,则first()方法返回第一个文档或抛出NoSuchElementException异常。

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

以下示例从movies集合中查找单个文档。它使用以下对象和方法

  • 一个传递给find()方法的query filter。该eq过滤器仅匹配标题与文本"The Room"完全匹配的电影。

  • 一个按评分降序组织匹配文档的sort,因此如果我们的查询匹配多个文档,则返回的文档是评分最高的文档。

  • 使用辅助方法 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()

返回

查找