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实例的更多信息,请参阅连接指南。

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
...

提示

Legacy API

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

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

后退

计算文档