查找文档
您可以通过在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()
,创建一个投影,包括title
和imdb
字段的对象,并排除_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文档: