このチュートリアルでは、ドキュメントの配列がそれ自体がネストされている場合でも、ドキュメントの配列内のフィールドに対してMongoDB Search クエリをインデックスて実行する方法を説明します。これらのフィールドに対するクエリを有効にするには、ドキュメントフィールドを embeddedDocuments 型としてインデックス。
このページのチュートリアルでは、以下のタイプの配列内のフィールドに対するクエリについて説明しています。
ドキュメントの配列。
ドキュメント内にあるドキュメントの配列。
ドキュメントの配列の中にあるドキュメントの配列。
開始する前に、クラスターが前提条件に記載されている要件を満たしていることを確認してください。
このチュートリアルでは、埋め込みドキュメントを対象にクエリを実行する方法を示す次のステップについて順を追って説明します。
クラスターに埋め込みドキュメントを含む、
schoolsという名前のサンプルコレクションを作成します。次のパスで構成された embeddedDocuments フィールドを含むMongoDB Searchインデックスを設定します。
teachersフィールドteachers.classesフィールドclubs.sportsフィールド
$searchクエリを実行して、schoolsコレクションに埋め込まれたドキュメントを検索します。この検索では、compound と embeddedDocument、および text を使用します。カウントを取得するには、埋め込みドキュメント フィールドに対して
$searchMetaクエリを実行します。
コレクションについて
schoolsサンプルコレクションには 3 つのドキュメントが含まれています。各ドキュメントには、学校の name と mascot、各言語の「first」名前と last の名前、subject と grade を含む classes とさまざまな が含まれています。 clubs が利用可能です。
インデックスについて
このコレクションのインデックスは、配列内の次のドキュメントを指定しています。
パスと
teachersteachers.classesパスにある配列内のドキュメントは embeddedDocuments としてインデックス付けされ、ドキュメント内のフィールドは 動的に インデックス付けされます。teachersパスにある配列内のドキュメントも、 強調表示 をサポートするために ドキュメント タイプとしてインデックス付けされ、ドキュメント内のフィールドは動的にインデックス化されます。clubsフィールドのドキュメントは、 動的マッピング が有効になっている ドキュメント タイプとしてインデックス付けされ、clubs.sportsフィールド内のドキュメントの配列は、動的マッピングが有効になっているembeddedDocumentsタイプとしてインデックス付けされます。
クエリについて
サンプル クエリは、 schoolsコレクション内の埋め込みドキュメントを検索します。 クエリは、次のパイプライン ステージを使用します。
$searchコレクションを検索します。$projectを使用してコレクションのフィールドを除外し、結果にscoreという名前のフィールドを追加します。 ハイライトを有効にするクエリの場合、$projectステージはハイライト情報を含むhighlightsという新しいフィールドも追加します。
チュートリアルでは、次のクエリについて説明します。
このクエリは、ドキュメント配列内のフィールドに対する検索を示しています。
teachersパスで最初の名前がJohnの指示を検索し、 Smithという姓の担当者を優先します。 また、 last名前フィールドの強調表示も有効になります。
このクエリは、ドキュメント内にネストされているドキュメントの配列内のフィールドに対する検索を示します。
これは、 clubs.sportsパスでdodgeballまたはfrisbeeのいずれかを実行する機会を提供するサポートが必要な学校を検索します。
このクエリでは、次の配列内のフィールドを検索する複合クエリが示されています。
ドキュメントの配列。
ドキュメントの配列内にネストされたドキュメントの配列。
クエリが teachers.classes パスで検索するのは、12th 年生の science クラスを教えている教師がいる学校で、Smith という名字の先生がそのクラスを教えている学校が優先されます。また、ドキュメントの teachers 配列内にネストされているドキュメントの classes 内の subject フィールドでハイライト機能も有効になります。
注意
クラスターのチュートリアルには、各学年でクラスを提供する学校数を取得するための $searchMeta クエリも含まれています。
埋め込みドキュメントに対してクエリを実行する
このチュートリアルでは、埋め込みドキュメントのフィールドに対するMongoDB Search クエリのサンプルを示します。これらのクエリの詳細については、このチュートリアルについてを参照してください。