Overview
在本指南中,您可以了解如何使用Kotlin驱动程序通过读取操作从MongoDB集合中检索数据。您可以调用 find() 方法来检索与查询筛选条件中指定的一设立条件匹配的文档。
样本数据
本指南中的示例使用来自 Atlas 示例数据集的 sample_mflix 数据库中的 movies 集合。要了解如何创建免费的 MongoDB Atlas 集群并加载示例数据集,请参阅 入门指南。
以下Kotlin数据类对此集合中的文档进行建模:
data class Movie(val title: String, val runtime: Int, val imdb: IMDB){ data class IMDB(val rating: Double) }
以下Kotlin数据类对本指南中示例返回的结果进行建模:
data class Results(val title: String)
查找操作
find() 方法从集合中检索文档。此方法采用查询筛选条件并返回所有匹配的文档。查询筛选条件是一个文档,其中指定了驱动程序用于匹配集合中的文档的条件。
如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。
查找一个文档示例
以下示例将 firstOrNull() 方法链接到 find() 方法调用,以查找 name字段的值为 "The Room" 的第一个文档:
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) .firstOrNull() if (resultsFlow == null) { println("No results found."); } else { println(resultsFlow) }
查找文档示例
此示例使用 find() 方法查找其中 runtime字段的值小于 15 的所有文档。find() 操作返回一个 FindFlow对象,您可以使用 collect() 方法遍历该对象,如以下示例所示:
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) resultsFlow.collect { println(it) }
注意
查找所有文档
要查找集合中的所有文档,请将空筛选器传递给find()方法:
val resultsFlow = collection.withDocumentClass<Results>() .find()
修改查找行为
您可以通过将方法链接到 FindFlow实例来修改 find() 方法的行为。下表描述了修改查询的常用方法:
方法 | 说明 |
|---|---|
| 限制每批处理返回的文档数量。默认值为 To learn more about batch size, see cursor.batchSize() in the MongoDB Server manual. |
| 设置查询的排序规则选项。 |
| 处理流中的每个元素并应用给定的 Lambda。 |
| 指定要添加到查询的字符串。这有助于您在服务器日志和配置数据中追踪和解释操作。 |
| 返回与查询匹配的第一个文档,如果不存在匹配文档,则抛出 |
| 返回与查询匹配的第一个文档,如果不存在匹配文档,则返回 |
| 指定用于查询的索引。 |
| 限制查询返回的文档数量。 |
| 设置要跳过的文档数。 |
| 定义要应用查询的排序条件。 |
以下示例链接了 limit() 方法,将查询返回的文档数量限制为 10:
val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find() .projection(projectionFields) .limit(10)
有关修改 find() 行为的方法的完整列表,请参阅Kotlin驱动程序API文档中的 FindFlow 类。
更多信息
如需了解有关查询过滤器的更多信息,请参阅指定查询。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: