AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

ドキュメントの検索

このガイドでは、Hibernate ORM用MongoDB拡張機能を使用してデータベースクエリを実行し、MongoDBコレクションからドキュメントを検索する方法を学びます。

MongoDBデータをクエリするには、セッションまたはエンティティマネージャーでcreateQuery()メソッドを呼び出します。次に、Hibernate クエリ言語 (HQL) または Jakarta Persistence クエリ言語 (JPQL) ステートメントでクエリを指定します。

コレクションからすべてのドキュメントを検索するには、select ステートメントを createQuery() メソッドに渡します。このステートメントで、クエリを実行するコレクションを表すエンティティを指定します。

次の例では、Movie エンティティをクエリして、sample_mflix.moviesコレクションからすべてのドキュメントの title 値を検索します。

var allDocs = session.createQuery("select title from Movie", String.class) .getResultList();for (var t : allDocs) { System.out.println("Title: " + t);}

特定の条件に一致するドキュメントを検索するには、where 句を含む選択ステートメントを createQuery() メソッドに渡します。このステートメントでは、クエリするコレクションと一致する条件を表すエンティティを指定します。

次の例では、sample_mflix.moviesコレクションから、title 値が "Romeo and Juliet" であるドキュメントを検索します。

var matchingDocs = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Romeo and Juliet") .getResultList();for (var m : matchingDocs) { System.out.println("Title: " + m.getTitle() + ", Year: " + m.getYear());}

特定の条件に一致する単一のドキュメントを検索するには、getSingleResult() メソッドを createQuery() メソッドにチェーンします。

次の例では、sample_mflix.moviesコレクションから、title 値が "Best in Show" である単一のドキュメントを検索します。

var singleResult = session.createQuery("from Movie where title = :t", Movie.class) .setParameter("t", "Best in Show") .getSingleResult();System.out.println("Title: " + singleResult.getTitle() + ", Year: " + singleResult.getYear());

重要

nonUniqueResultException エラー

クエリが複数のドキュメントに一致する場合、getSingleResult() メソッドは NonUniqueResultException エラーをスローします。このエラーを回避するには、クエリが 1 つのドキュメントのみと一致することを確認するか、クエリ結果を 1 つのドキュメントに制限します。

HQL または JQL ステートメントを使用してクエリフィルターを作成する代わりに、Java 永続化基準API を使用して型安全性のあるクエリをプログラムで構築できます。

Criteria APIを使用してクエリを作成するには、次の手順を実行します。

  1. セッションまたはエンティティ マネージャーから CriteriaBuilderオブジェクトを作成します。

  2. ビルダから CriteriaQueryオブジェクトを作成し、クエリするエンティティを指定します。

  3. クエリ条件を指定するには、CriteriaQueryクラスが提供するクエリメソッドを使用します。

Tip

Criteria APIの詳細については、Java JIRA ドキュメントの「Criteria APIを使用してクエリを作成する」を参照してください。

次の例では、Criteria APIを使用して、sample_mflix.moviesコレクションから year 値が 1925 であるすべてのドキュメントを検索する。

CriteriaBuilder cb = session.getCriteriaBuilder();CriteriaQuery<Movie> cq = cb.createQuery(Movie.class);Root<Movie> movieRoot = cq.from(Movie.class); cq.select(movieRoot).where(cb.equal(movieRoot.get("year"), 1925));session.createQuery(cq).getResultList() .forEach(m -> System.out.println(m.getTitle()));

現在 Hibernate ORM 拡張機能でサポートされていないMongoDBクエリを実行するには、クエリをMongoDBクエリ言語(MQL)ステートメントとして createNativeQuery() メソッドに渡します。

ネイティブクエリの実行方法について学ぶには、「ネイティブクエリの実行」ガイドを参照してください。

MongoDBデータに対してその他の操作を行う方法の詳細については、CRUD 操作ガイドを参照してください。

HQL と JQL を使用してクエリを実行する方法の詳細については、非表示の ORM ドキュメントの「非表示のクエリ言語へのガイド」を参照してください。