检索字段的不同值
您可以通过调用 MongoCollection
对象上的 distinct()
方法,来检索集合中某个字段的不同值列表。将文档字段名称作为第一个参数进行传递,并将结果转换后的目标类作为第二个参数进行传递,如下所示:
collection.distinct("countries", String.class);
您可以使用点符号在文档上指定一个字段或在嵌入式文档中指定一个字段。以下方法调用返回 awards
嵌入式文档中 wins
字段的每个非重复值:
collection.distinct("awards.wins", Integer.class);
您可以选择将查询筛选器传递给该方法,以限制 MongoDB 实例从中检索非重复值的文档集,如下所示:
collection.distinct("type", Filters.eq("languages", "French"), String.class);
distinct()
方法返回一个实现 DistinctIterable
接口的对象。此接口包含用于访问、组织和遍历结果的方法。它还从其父接口 MongoIterable
继承方法,例如返回第一个结果的 first()
和返回 MongoCursor
实例的 cursor()
。
例子
以下代码段从 movies
集合中检索 year
文档字段的不同值列表。它使用查询筛选器来匹配将 “Carl Franklin” 作为 directors
数组中的某个值的电影。
注意
此示例使用连接 URI 连接到MongoDB实例。 要学习;了解有关连接到MongoDB实例的更多信息,请参阅连接指南。
// Retrieves distinct values of a field by using the Java driver package usage.examples; import org.bson.Document; import com.mongodb.MongoException; import com.mongodb.client.DistinctIterable; 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.Filters; public class Distinct { 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"); try { // Retrieves the distinct values of the "year" field present in documents that match the filter DistinctIterable<Integer> docs = collection.distinct("year", Filters.eq("directors", "Carl Franklin"), Integer.class); MongoCursor<Integer> results = docs.iterator(); // Prints the distinct "year" values while(results.hasNext()) { System.out.println(results.next()); } // Prints a message if any exceptions occur during the operation } catch (MongoException me) { System.err.println("An error occurred: " + me); } } } }
运行该示例时,您应该会看到输出,其中报告了 Carl Franklin 作为主管的所有电影的每个不同年份,该输出类似于以下内容:
1992 1995 1998 ...
有关此页面上所提及的类和方法的更多信息,请参阅以下资源:
distinct() API文档
DistinctIterable API 文档
点符号服务器手册条目
MongoIterable API 文档