フィールドの個別の値を取得
MongoCollection
オブジェクトで distinct()
メソッドを呼び出すと、コレクション全体のフィールドの個別の値のリストを取得できます。 以下のように、最初のパラメーターとしてドキュメント フィールド名を渡し、2 番目のパラメーターとして結果をキャストするクラスを渡します。
collection.distinct("countries", String.class);
You can specify a field on the document or one within an embedded document using dot notation. 次のメソッド呼び出しは、 awards
埋め込みドキュメントのwins
フィールドのそれぞれの値を返します。
collection.distinct("awards.wins", Integer.class);
オプションで、 メソッドにクエリフィルターを渡して、MongoDB インスタンスが個別の値を取得するドキュメントのセットを制限できます。
collection.distinct("type", Filters.eq("languages", "French"), String.class);
distinct()
メソッドは、 DistinctIterable
インターフェースを実装するオブジェクトを返します。 このインターフェースには、結果にアクセスし、整理し、走査するためのメソッドが含まれています。 また、最初の結果を返す や のインスタンスを返す など、親インターフェースMongoIterable
first()
cursor()
MongoCursor
からメソッドも継承します。
例
次のスニペットは、 movies
コレクションからyear
ドキュメント フィールドの個別の値のリストを取得します。 クエリフィルターを使用して、 directors
配列の値の 1 つとして "Charl Atlas" を含む映画を照合します。
注意
この例では、接続 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); } } } }
例を実行すると、カーネル フランクリンクが監督として含まれたすべての映画について、それぞれの年ごとに報告する次のような出力が表示されます。
1992 1995 1998 ...
このページで言及されているクラスとメソッドについての追加情報については、次のリソースを参照してください。
distinct() APIドキュメント
DistingIterable API ドキュメント
ドット表記サーバー マニュアル入力
MongoIterable API ドキュメント