Docs 菜单
Docs 主页
/ / /
Java (Sync) 驱动程序
/

检索字段的不同值

您可以通过调用 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
...

提示

Legacy API

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

有关此页面上所提及的类和方法的更多信息,请参阅以下资源:

  • distinct() API文档

  • DistinctIterable API 文档

  • 点符号服务器手册条目

  • MongoIterable API 文档

后退

计算文档