查找文档

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

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

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

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

find()方法返回 的实例FindIterable,该类提供多种方法来访问、组织和遍历结果。 FindIterable还从其父类继承方法, MongoIterable例如first().

first()方法返回检索结果中的第一个文档,或者null如果没有结果。

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

  • 查询过滤器传递给该find()方法。eq 过滤器只匹配电影的标题文本完全匹配 'The Room'
  • 一种按评级降序组织匹配文档的排序,因此如果我们的查询匹配多个文档,则返回的文档是具有最高评级的文档。
  • 包含 字段中的对象使用辅助方法排除该字段 投影titleimdb_idexcludeId()
笔记

此示例使用连接字符串连接到 MongoDB 实例。要了解有关连接到 MongoDB 实例的更多信息,请参阅 连接指南

package usage.examples;
import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Projections; import com.mongodb.client.model.Sorts;
public class FindOne { public static void main( String[] args ) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Bson projectionFields = Projections.fields( Projections.include("title", "imdb"), Projections.excludeId()); Document doc = collection.find(eq("title", "The Room")) .projection(projectionFields) .sort(Sorts.descending("imdb.rating")) .first(); if (doc == null) { System.out.println("No results found."); } else { System.out.println(doc.toJson()); } } } }

 

查找多个文档

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

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

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

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

find()方法返回 的实例FindIterable,该类提供多种方法来访问、组织和遍历结果。 FindIterable还从其父类继承方法,该类 MongoIterable实现了核心 Java 接口Iterable

您可以调用 上的iterator()方法,方法MongoIterable返回MongoCursor可用于遍历结果实例。您可以调用MongoCursor诸如此类的方法hasNext()来检查是否存在其他结果,或next()返回集合中的下一个文档。如果没有文档与查询匹配,则调用hasNext() 返回false并因此调用next()引发异常。

如果next()在迭代器返回最终结果之后或在没有结果存在时调用迭代器,它会抛出类型为 的异常 java.util.NoSuchElementException始终用于hasNext()在调用之前检查是否存在其他结果next()

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

  • 查询过滤器传递给该find()方法。lt() 过滤器仅匹配运行时间少于 15 分钟的电影。
  • 一个排序,组织中(“A”前“Z”)的标题降序排列返回的文档。
  • 包含 字段中的对象使用辅助方法排除该字段 投影titleimdb_idexcludeId()
笔记

此示例使用连接字符串连接到 MongoDB 实例。要了解有关连接到 MongoDB 实例的更多信息,请参阅 连接指南

package usage.examples;
import static com.mongodb.client.model.Filters.lt; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Projections; import com.mongodb.client.model.Sorts;
public class Find { public static void main( String[] args ) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Bson projectionFields = Projections.fields( Projections.include("title", "imdb"), Projections.excludeId()); MongoCursor<Document> cursor = collection.find(lt("runtime", 15)) .projection(projectionFields) .sort(Sorts.descending("title")).iterator(); try { while(cursor.hasNext()) { System.out.println(cursor.next().toJson()); } } finally { cursor.close(); } } } }

 

提示
传统 API

如果您使用的是旧 API, 请参阅我们的常见问题解答页面 以了解您需要对此代码示例进行哪些更改。

 

官网地址:https://docs.mongodb.com/drivers/java/sync/current/usage-examples/findOne/