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

查找多个文档

您可以通过调用以下方法在集合中查询多个文档:...MongoCollection 对象上使用 find() 方法。向 find() 方法传递查询过滤器,以查询并返回与过滤器匹配的集合中的文档。如果不包含过滤器,MongoDB 将返回集合中的所有文档。

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

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

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

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

FindFlow 还从 Kotlin 协程库的代理接口 Flow 获取方法。您可以调用 collect() 方法遍历获取的结果。您还可以调用终端方法,例如 firstOrNull() 来返回第一个文档或 null(如果没有结果),或 first() 来返回集合中的第一个文档。如果没有任何文档与查询匹配,调用 first() 将抛出 NoSuchElementException 异常。

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

以下代码片段查找并打印与 movies 集合上的查询匹配的所有文档。它使用了以下对象和方法

  • 一个传递给 find() 方法的 查询过滤器。该 lt() 过滤器仅匹配运行时间小于 15 分钟的电影。

  • 一个 排序,它按标题的降序("Z" 在 "A" 之前)组织返回的文档。

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

注意

本示例通过连接URI连接到MongoDB实例。要了解更多关于连接到您的MongoDB实例的信息,请参阅连接指南。

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.runBlocking
data class Movie(val title: String, val runtime: Int, val imdb: IMDB){
data class IMDB(val rating: Double)
}
data class Results(val title: String)
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(lt(Movie::runtime.name, 15))
.projection(projectionFields)
.sort(Sorts.descending(Movie::title.name))
resultsFlow.collect { println(it) }
mongoClient.close()
}

关于本页面上提到的类和方法的更多信息,请参阅以下API文档

  • FindFlow

  • find()

返回

查找单个文档