查找多个文档
您可以通过调用 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()
包含title
和imdb
字段中的对象并排除_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 文档: