检索字段的不同值

您可以通过调用 对象distinct()方法来检索集合中某个字段的不同值列表MongoCollection将文档字段名称作为第一个参数传递,并将您想要将结果转换为的类作为第二个参数传递,如下所示:

collection.distinct("countries", String.class);

 

您可以 使用圆点表示法在文档上或嵌入文档中指定一个字段以下方法调用返回嵌入文档中字段的每个不同值winsawards

collection.distinct("awards.wins", Integer.class);

 

您可以选择将查询过滤器传递给该方法,以限制您的 MongoDB 实例从中检索不同值的文档集,如下所示:

collection.distinct("type", Filters.eq("languages", "French"), String.class);

 

distinct()方法返回一个实现该DistinctIterable接口的对象 该接口包含访问、组织和遍历结果的方法。它还从其父接口继承方法MongoIterable,例如,first()哪个返回第一个结果,cursor()哪个返回 a 的实例MongoCursor

以下代码段year 从movies集合中检索文档字段的不同值列表它使用查询过滤器来匹配包含“Carl Franklin”作为directors数组中值之一的电影 

笔记

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

 

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 { DistinctIterable<Integer> docs = collection.distinct("year", Filters.eq("directors", "Carl Franklin"), Integer.class); MongoCursor<Integer> results = docs.iterator(); while(results.hasNext()) { System.out.println(results.next()); } } catch (MongoException me) { System.err.println("An error occurred: " + me); } } } }

 

当您运行该示例时,您应该看到输出报告了 Carl Franklin 作为导演的所有电影的每个不同年份,它应该如下所示:

1992
1995
1998
...

 

提示
传统 API

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

 

官方文档:https://docs.mongodb.com/drivers/java/sync/current/usage-examples/distinct/