MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs 菜单
Docs 主页

查找文档

您可以通过将 MongoCollection 对象上的 find()first() 方法链接在一起来检索集合中的单个文档。您可以将查询筛选条件传递给 find() 方法进行查询并返回集合中与筛选条件匹配的文档。如果不包含筛选条件,MongoDB 将返回集合中的所有文档。

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

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

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

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

FindFlow 还可以从 Kotlin 协程库的委托接口Flow获取方法,例如first()firstOrNull()firstOrNull()方法返回检索结果中的第一个文档,如果没有结果,则返回nullfirst()方法返回第一个文档,如果没有文档与查询匹配,则抛出NoSuchElementException异常。

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

以下代码片段从 movies 集合中查找单个文档。它使用以下对象和方法:

  • 传递给 find() 方法的查询筛选器eq 筛选器仅会匹配标题与 "The Room" 文本完全匹配的电影。

  • 排序,按评分以降序组织匹配的文档;因此,如果查询匹配多个文档,则返回的文档将是评分最高的文档。

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