Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでMongoDBのプロジェクション(射影)を使って必要なフィールドだけを取得する方法

MongoDBのコレクションからデータを取得する際、ドキュメント内のすべてのフィールドが必要とは限りません。そんなときに役立つのがプロジェクション(projection)です。プロジェクションを使うと、取得したいフィールドだけを選択的に取り出すことができ、不要なデータの転送を抑えてパフォーマンスを向上させられます。

Javaでのプロジェクションの基本

JavaでMongoDBからドキュメントを読み込む際にプロジェクションを適用するには、find()メソッドの結果に対してprojection()メソッドを呼び出します。このメソッドの引数として、取得したいフィールド名を指定します。

projection(Projections.include("name", "age"));

上記の例では、nameフィールドとageフィールドのみを含めるよう指定しています。Projections.include()は、指定したフィールドだけを結果に含めるためのヘルパーメソッドです。

サンプルコード

以下のJavaのサンプルでは、コレクションからドキュメントを読み込み、プロジェクションを使用してnameフィールドとageフィールドの値のみを表示しています。

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Projections;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;

public class ProjectionExample {
    public static void main( String args[] ) {
        // MongoDBクライアントを作成
        MongoClient mongo = new MongoClient( "localhost" , 27017 );
        // データベースに接続
        MongoDatabase database = mongo.getDatabase("myDatabase");
        // コレクションオブジェクトを取得
        MongoCollection<Document> collection = database.getCollection("students");

        // ドキュメントを作成
        Document document1 = new Document("name", "Ram").append("age", 26).append("city", "Hyderabad");
        Document document2 = new Document("name", "Robert").append("age", 27).append("city", "Vishakhapatnam");
        Document document3 = new Document("name", "Rhim").append("age", 30).append("city", "Delhi");

        // 作成したドキュメントを挿入
        List<Document> list = new ArrayList<Document>();
        list.add(document1);
        list.add(document2);
        list.add(document3);
        collection.insertMany(list);
        System.out.println("Documents Inserted");

        collection = database.getCollection("students");

        // プロジェクションを適用してドキュメントを取得
        FindIterable<Document> iterDoc =
            collection.find().projection(Projections.include("name", "age"));

        Iterator it = iterDoc.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

実行結果

Documents Inserted
Document{{_id=5e8966533f68506911c946dc, name=Ram, age=26}}
Document{{_id=5e8966533f68506911c946dd, name=Robert, age=27}}
Document{{_id=5e8966533f68506911c946de, name=Rhim, age=30}}

出力のポイント

実行結果を見ると、各ドキュメントには_idnameageの3つのフィールドしか含まれておらず、挿入時に指定したcityフィールドは除外されていることがわかります。

_idフィールドは、明示的に除外しない限り常に結果に含まれる点に注意してください。もし_idも除外したい場合は、Projections.excludeId()を組み合わせて使用します。

まとめ

  • プロジェクションを使うと、必要なフィールドだけを取得でき、ネットワーク帯域やメモリの使用量を削減できます。
  • Javaではfind()の結果に対してprojection()メソッドをチェーンして呼び出します。
  • Projections.include()で含めたいフィールドを、Projections.exclude()で除外したいフィールドを指定できます。
  • _idはデフォルトで含まれるため、不要な場合は明示的に除外する必要があります。
  1. Javaのパッケージとは?作成・コンパイル・実行方法をわかりやすく解説

    Javaでは、互いに関連するクラスやインターフェースを「パッケージ」という単位でグループ化します。パッケージとは、特定の概念に関連するクラスやインターフェースを格納するディレクトリ(フォルダ)のようなものです。例えば、入出力操作に関するすべてのクラスやインターフェースは、java.io パッケージにまとめられています。 パッケージを利用することで、クラス名の衝突を防ぎ、コードの管理性や再利用性が向上するというメリットがあります。 パッケージの作成方法 クラスやインターフェースをパッケージにまとめるには、ファイルの先頭で package キーワードを使って宣言するだけです。以下はその例です。 サ

  2. Java Swingのアーキテクチャとは?特徴とMVCモデルをわかりやすく解説

    Java Swingは、Javaプログラム向けにグラフィカルユーザーインターフェース(GUI)を提供するAPI群です。Java Swingは、それ以前のAPIであるAbstract Window Toolkit(AWT)をベースに開発されました。AWTと比べて、より豊富で洗練されたGUIコンポーネントを備えており、シンプルな部品から複雑なツリーやテーブルまで幅広く利用できます。さらに、プラグイン可能なルック&フィール(Pluggable Look and Feel)機能により、Javaプログラムの外観を基盤となるプラットフォームから独立して制御できる点も大きな特長です。 Java Swingの