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

查找多个文档

您可以通过调用 MongoCollection 对象的 find() 方法来查询集合中的多个文档。将查询筛选器传递给 find() 方法进行查询并返回集合中与筛选器匹配的文档。如果不包含过滤器,MongoDB 将返回集合中的所有文档。

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

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

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

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

FindFlow 还会从 Kotlin 协程库的委托接口Flow获取方法。 您可以调用collect()方法来遍历获取的结果。 您还可以调用终端方法,例如调用firstOrNull()返回第一个文档,如果没有结果,则返回null ,或者first()返回collection中的第一个文档。如果没有文档与查询匹配,则调用first()会引发NoSuchElementException异常。

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

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

  • 传递给 find() 方法的查询筛选器lt() 筛选器只匹配运行时少于 15 分钟的电影。

  • 按标题降序对返回文档进行组织的排序(“Z”在“A”之前)。

  • 使用辅助方法 excludeId() 包含 titleimdb 字段中的对象并排除 _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()

后退

查找文档