定義
facetfacetコレクターは、指定されたファセット フィールドの値または範囲で結果をグループ化し、各グループのカウントを返します。$searchステージと$searchMetaステージの両方でfacetを使用できます。MongoDB では、クエリのみのメタデータ結果を取得するために、facetステージで$searchMetaを使用することを推奨しています。$searchステージを使用してメタデータ結果とクエリ結果を取得するには、$$SEARCH_META集計変数を使用する必要があります。詳しくは、「SEARCH_META集計変数」を参照してください。embeddedDocuments フィールド型定義で storedSource を定義すると、 returnStoredSource とともに returnScope を使用して、オブジェクト配列内のネストされたフィールドにファセットを設定できます。それ以外の場合は、ルートの embeddedDocuments 型フィールドに対してのみファセットを設定できます。ファセットの例:
ネストされたフィールドがオブジェクト配列内に含まれている場合を参照してください。returnScopeの例。
embeddedDocumentを使用したembeddedDocuments配列の子の照合については、埋め込みスコープのファセットの例を参照してください。ルート
embeddedDocuments型フィールドについては、ファセットクエリを参照してください。
構文
facet の構文は次のとおりです。
{ "$searchMeta"|"$search": { "index": <index name>, // optional, defaults to "default" "facet": { "operator": { <operator-specifications> }, "facets": { <facet-definitions> } }, "returnScope": { "path": "<embedded-documents-field-to-query>" }, "returnStoredSource": true }}フィールド
フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
| ドキュメント | はい | |
| ドキュメント | no | ファセットを実行するために使用する演算子 。省略した場合、 MongoDB Search はコレクション内のすべてのドキュメントに対してファセットを実行します。 |
メモリ要件
ファセットクエリは、クラスター階層に関係なく、メモリを大量に消費します。ファセット集計またはネストされたファセットを指定するクエリは、他のファセットクエリよりも多くのメモリとディスクを必要とします。本番環境でファセットを使用する前に、クラスターにワークロードを処理するのに十分なメモリがあることを確認してください。詳細については、「Search Memory マネジメント」を参照してください。ワークロードのサイジングに関するガイダンスについては、サポートにリクエストしてください。
ファセットクエリが必要とするメモリは、numBuckets または boundaries を使用してリクエストするバケットの数ではなく、ファセットするフィールドの一意の値の数によって異なります。例、500 万個の一意の値を持つフィールドで 20 個のバケットをリクエストするファセットでは、上位 20 個のバケットを決定するためにすべての一意の値をカウントします。
ネストされたファセットの場合、クエリで計算される一意の値の合計は、ネストの各レベルにわたる一意の値に基づいて乗算されます。個々のフィールドの濃度が低い場合でも、ネストされたパス全体で値を組み合わせると、多数の一意のバケットが生成される可能性があります。ネストされたファセットがバケットを乗算する方法の詳細については、「ネストされたファセット」を参照してください。
MongoDB Searchはクエリごとにバケット数を個別に追跡するため、合計メモリ使用量は同時実行されるファセットクエリの数に応じて増加します。シャーディングされたクラスターでは、MongoDB Searchは各シャードからのバケットをマージするためにもメモリを必要とします。このメモリ使用量は、シャードの数とバケットの数に応じて増加します。
ファセットの定義
ファセット定義ドキュメントには、ファセット名とファセットのタイプに固有のオプションが含まれています。MongoDB Search は次の型のファセットをサポートしています。
文字列ファセット
重要
stringFacet は廃止予定です。代わりにトークンを使用することで、ファセットが改善されます。
ファセットの更新されたフィールド型と古いフィールド型の違いの詳細については、ファセットのフィールド型の比較を参照してください。
文字列ファセットを使用すると、指定された文字列フィールド内の最も頻繁に出現する文字列値に基づいて、MongoDB Search 結果を絞り込むことができます。文字列フィールドは、トークンとしてインデックス付けする必要があることに注意してください。埋め込みドキュメント内のstringフィールドをファセットするには、親フィールドもドキュメント型としてインデックス付けする必要があります。配列内の文字列または埋め込みドキュメントをファセットすると、MongoDB Search は一致するルート ドキュメントの数に基づいてファセット数を返します。
構文
文字列ファセットの構文は次のとおりです。
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "string", "path" : "<field-path>", "numBuckets" : <number-of-categories>, "embeddedDocument": { <embedded-document-scope> } // optional } } } }}オプション
オプション | タイプ | 説明 | 必須 |
|---|---|---|---|
| オブジェクト | クエリ述語に一致する | no |
| 整数 | 結果で返されるファセット カテゴリの最大数。値は | no |
| string | ファセットするフィールドパス。トークンとしてインデックス付けされたフィールドを指定できます。 | はい |
| string | ファセットの型。値は | はい |
例
例
次の例では、sample_mflix.movies コレクションで default という名前のインデックスを使用します。コレクション内の genres フィールドはトークン型としてインデックス付けされ、year フィールドは数値型としてインデックス付けされます。
{ "mappings": { "dynamic": false, "fields": { "genres": { "type": "token" }, "year": { "type": "number" } } }}クエリは、$searchMeta ステージを使用して、movies コレクションの year フィールドで 2000 年から 2015 年までの映画を検索し、各ジャンルの映画の数を検索します。
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "year", "gte": 2000, "lte": 2015 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } } } }])これらの結果の詳細については、「ファセット結果」を参照してください。
数値ファセット
重要
numberFacet は廃止予定です。代わりに数値を使用してください。これにより、ファセットが改善されます。
ファセットの更新されたフィールド型と古いフィールド型の違いの詳細については、ファセットのフィールド型の比較を参照してください。
数値ファセットを使用すると、結果を個別の数値の範囲に分割して、検索結果内の数値の頻度を判断できます。配列または埋め込みドキュメント内の数値をファセットと、 MongoDB Search は一致するルート ドキュメントの数に基づいてファセット数を返します。
構文
数値ファセットの構文は次のとおりです。
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "number", "path" : "<field-path>", "boundaries" : <array-of-numbers>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } }}オプション
オプション | タイプ | 説明 | 必須 |
|---|---|---|---|
| 数字の配列 | バケットの境界を指定する昇順の数値リスト。2 から 1 万 (
| はい |
| string | 指定された境界内に含まれない、演算子から返されたドキュメントをカウントする追加のバケットの名前。省略した場合、 MongoDB Search には、指定されたバケットに該当しないファセット演算子の結果も含まれますが、バケット数には含まれません。 | no |
| オブジェクト | クエリ述語に一致する | no |
| string | ファセットするフィールドパス。数値型としてインデックス付けされたフィールドを指定できます。 | はい |
| string | ファセットの型。値は | はい |
例
例
次の例では、sample_mflix.movies コレクションで default という名前のインデックスを使用します。コレクション内の year フィールドは、数値型としてインデックスされます。
{ "mappings": { "dynamic": false, "fields": { "year": [ { "type": "number" } ] } }}クエリは、$searchMeta ステージを使用して、movies コレクションの year フィールドで 1980 年から 2000 年までの映画を検索し、クエリのメタデータ結果を検索します。クエリでは 3 つのバケットを指定します。
1980(このバケットの下限値を含む)1990(1980バケットの上限(排他的)とこのバケットの下限(包括的))2000(1990バケットの排他的上限)
クエリでは、指定された境界のいずれにも該当しないクエリの結果を検索するために、other という名前の default バケットも指定します。
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "year", "gte": 1980, "lte": 2000 } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1980,1990,2000], "default": "other" } } } } }])これらの結果の詳細については、「ファセット結果」を参照してください。
日付ファセット
重要
dateFacet は廃止予定です。代わりに date を使用することで、ファセットが改善されます。
ファセットの更新されたフィールド型と古いフィールド型の違いの詳細については、ファセットのフィールド型の比較を参照してください。
日付ファセットを使用すると、日付に基づいて検索結果を絞り込むことができます。配列または埋め込みドキュメント内の日付をファセットと、 MongoDB Search は一致するルート ドキュメントの数に基づいてファセット数を返します。
構文
日付ファセットの構文は次のとおりです。
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "date", "path" : "<field-path>", "boundaries" : <array-of-dates>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } }}オプション
オプション | タイプ | 説明 | 必須 |
|---|---|---|---|
| 数字の配列 | 各バケットの境界を指定する日付値のリスト。以下を指定する必要があります:
隣接する各値のペアは、バケットの包括的な下限と排他的な上限として機能します。 | はい |
| string | 指定された境界内に含まれない、演算子から返されたドキュメントをカウントする追加のバケットの名前。省略した場合、 MongoDB Search には指定されたバケットに該当しないファセット演算子の結果も含まれますが、 MongoDB Search はこれらの結果をバケットカウントに含めません。 | no |
| オブジェクト | クエリ述語に一致する | no |
| string | ファセットするフィールドパス。日付型としてインデックス付けされたフィールドを指定できます。 | はい |
| string | ファセットの型。値は | はい |
例
例
次の例では、sample_mflix.movies コレクションで default という名前のインデックスを使用します。コレクション内の released フィールドは、date 型としてインデックス付けされます。
{ "mappings": { "dynamic": false, "fields": { "released": [ { "type": "date" } ] } }}クエリは、$searchMeta ステージを使用して、movies コレクションの released フィールドで 2000 年から 2015 年までの映画を検索し、クエリのメタデータ結果を検索します。このクエリでは、次の 4 つのバケットを指定します。
2000-01-01(このバケットの下限値を含む)2005-01-01(2000-01-01バケットの上限(排他的)とこのバケットの下限(包括的))2010-01-01(2005-01-01バケットの上限(排他的)とこのバケットの下限(包括的))2015-01-01(2010-01-01バケットの排他的上限)
クエリでは、指定された境界のいずれにも該当しないクエリの結果を検索するために、other という名前の default バケットも指定します。
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "released", "gte": ISODate("2000-01-01T00:00:00.000Z"), "lte": ISODate("2015-01-31T00:00:00.000Z") } }, "facets": { "yearFacet": { "type": "date", "path": "released", "boundaries": [ISODate("2000-01-01"), ISODate("2005-01-01"), ISODate("2010-01-01"), ISODate("2015-01-01")], "default": "other" } } } } }])これらの結果の詳細については、「ファセット結果」を参照してください。
ファセットのフィールド型の比較
更新されたMongoDB検索フィールドタイプは、古いタイプ(stringFacet、numberFacet、dateFacet)と比較して、ファセットをサポートする機能が改善されています。次の表では、機能における主な違いをまとめています。
ファセットカテゴリ | 更新されたフィールドタイプ | 古いファセットの型 | 重要な違い |
|---|---|---|---|
文字列 | stringFacet(廃止予定) | ノーマライザーのサポート: | |
Numeric | numberFacet(廃止予定) | 配列のサポート: | |
日付 | dateFacet(廃止予定) | 配列サポート: |
注意
古いフィールド型と更新されたフィールド型の両方が同じフィールドで定義されている場合は、古いファセット型が優先されます。例、フィールドに token と stringFacet の両方が定義されている場合、ファセット計算では stringFacet マッピングが使用されます。
埋め込みドキュメントの配列の一致する子に対するファセット
各ファセット定義には、任意の embeddedDocument フィールドを含めることができます。このフィールドは、ファセットのバケットカウントを、クエリ述語に一致する embeddedDocuments 配列内の子ドキュメントのみにスコープします。embeddedDocument フィールドを省略した場合、ファセットはドキュメントインデックスになります。
embeddedDocumentがない場合、ルートドキュメントは、facet.operatorブロックで定義されたクエリに一致しない子ドキュメントであっても、そのバケットに該当する子ドキュメントがあれば、そのバケットでカウントされます。embeddedDocumentフィールドは、バケットへの寄与を、指定されたembeddedDocument.operatorに一致する子のみに制限します。各ルートドキュメントは、バケットごとに最大1回カウントされます。
embeddedDocument フィールドは、次のフィールドがあります。
フィールド | タイプ | 説明 | 必須 |
|---|---|---|---|
| string | ファセットのスコープを絞り込むためのインデックス付き | はい |
| オブジェクト |
| はい |
数値または日付ファセットの場合、値が構成済みのboundariesの範囲外にある一致する子ドキュメントは、ドキュメントインデックス付きファセットと同じルールを使用して、指定されている場合はdefaultバケットにカウントされます。一致する子ドキュメントがないルートドキュメントはembeddedDocumentスコープのファセットには寄与しませんが、同じクエリ内の他のスコープなしファセットには寄与する可能性があります。
重要
embeddedDocumentスコープのファセットを他のいくつかのファセットオプションと組み合わせることはできません。詳しくは、「制限」を参照してください。
例については、埋め込みスコープのファセットの例を参照してください。
ファセット集計
重要
ファセット集計はプレビュー中です。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。詳細を学ぶには、プレビュー機能を参照してください。
各ファセットバケットのメトリクスを計算するには、aggregationsドキュメントをファセット定義に追加します。MongoDB SearchはMongoDB Searchインデックスからメトリクスを計算するため、パイプラインの後半で$groupステージを実行するよりもはるかに効率的です。
各ファセット バケットでは、aggregations を使用して次の値を計算できます。
合計
平均
minimum
maximum
最初に
last
aggregationsを使用する場合は、次のことを行う必要があります。
各メトリクスの
pathで指定するフィールドをtoken、number、またはdateとしてインデックス化します。バケット数が必要な場合は、
countメトリクスを明示的に含めてください。aggregationsは、ネストされたファセットのリーフレベルでのみ指定してください。中間的なグループ化のメトリクスを計算する場合は、そのグループ化を
aggregationsを使用した個別のトップレベルのファセットとして指定し、ネストされたファセットは指定しないでください。
MongoDB Search は、MongoDB Search インデックス内のデータに対して aggregations を計算します。このインデックスは 終極的にコンシステントです。
注意
メモリ要件
aggregations または ネストされたファセット を指定するファセットクエリは、他のファセットクエリの要件を超えて、MongoDB Search インデックスに必要なメモリとディスクを増加させます。詳しく学ぶには、「メモリ要件」をご覧ください。
構文
aggregations の構文は次のとおりです。
{ "$searchMeta": { "facet": { "facets": { "<facet-name>": { "type": "<facet-type>", "path": "<field-path>", "aggregations": { "<aggregation-name>": { "type": "sum" | "min" | "max" | "avg" | "first" | "last", "path": "<field-path>" } } } } } }}aggregations ドキュメントの各キーは、指定した集計名です。MongoDB Search は、指定した名前の下にあるバケットドキュメント内の各集計を返します。
オプション
オプション | タイプ | 説明 | 必須 |
|---|---|---|---|
| string | メトリクスを計算するフィールドパス。これは、 | 条件付き |
| string | 計算するメトリクスのタイプ。値は次のいずれかになります。
各メトリクスの詳細について学ぶには、「メトリクスの種類」を参照してください。 | はい |
メトリクス型
タイプ | フィールドの要件 | 説明 |
|---|---|---|
| なし | バケット内のドキュメントをカウントします。このメトリクスタイプには |
| バケット内のドキュメントについて、指定されたフィールドの値を加算します。 | |
| バケット内のドキュメントの指定したフィールドの値の平均を返します。bucket 内のドキュメントのいずれにもフィールドの値が設定されていない場合、MongoDB Search は | |
| なし | バケット内のドキュメントについて、指定されたフィールドの最小値を返します。 |
| なし | バケット内のドキュメントについて、指定されたフィールドの最大値を返します。 |
| なし | クエリのソートオプションで定義された順序に従って、バケット内の最初のドキュメントの指定されたフィールドの値を返します。クエリでソートが指定されていない場合、順序は任意です。ソートを指定する方法を学ぶには、MongoDB Search結果のソートを参照してください。 |
| なし | クエリのソートオプションで定義された順序に従って、バケット内の最後のドキュメントの指定されたフィールドの値を返します。クエリでソートが指定されていない場合、順序は任意です。ソートを指定する方法を学ぶには、MongoDB Search結果のソートを参照してください。 |
重要
min また、maxはtokenを含むすべてのフィールドタイプをサポートしています。MongoDB Searchがこれらのメトリクスを計算する際、フィールドがサポートされていない型に解決されるドキュメントはスキップされます。MongoDB Searchは、ドキュメントをスキップしてもエラーを返しません。MongoDB Searchがバケット内のドキュメントをスキップしたかどうかを確認するには、同じaggregationsドキュメントにcountメトリクスを追加し、期待されるドキュメント数と比較します。
MongoDB Search がスキップしない値については、min はバケット内の最小値を選択し、max は最大値を選択します。値がすべて同じ型ではない場合、MongoDB Search は BSON 型の比較順序 を適用して、どの値が最小か最大かを判断します。
配列の考慮事項
各メトリクスタイプは、配列のように複数の値に解決されるフィールドをそれぞれ異なる方法で取り扱います。
sumおよびavgドキュメントをスキップします。minそしてmax配列内の最小値と最大値を選択し、ドキュメントの代表要素として使用します。firstおよびlastは、すべての値を配列として返します。
first および last の場合、返される配列は、次の点でソースドキュメントと異なります。
値の順序は異なる場合があります。MongoDB Searchはインデックスから値を読み取りますが、これはソースドキュメントの順序を保持しません。例として、ドキュメントに
["red", "blue", "green"]が含まれている場合、MongoDB Searchは["blue", "green", "red"]を返す可能性があります。MongoDB Searchは、重複する値のインスタンスを1つだけ返します。
MongoDB Searchは、ファセットに使用できない型の値を含め、パスにあるすべての値を返します。例として、配列に文字列とブール値の両方が含まれている場合、MongoDB Searchは文字列とともにブール値を返します。
ソースドキュメントに含まれているとおりに値を返すには、インデックス定義でフィールドの storedSource を定義し、クエリで returnStoredSource を true に設定します。
ネストされたファセット
重要
ネストされたファセットはプレビュー版です。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。詳細については、プレビュー機能をご覧ください。
各バケット内のドキュメントを追加のフィールドでグループ化するには、既存のファセット定義に facets ドキュメントを追加します。ネストされた各ファセット定義は、トップレベルのファセット定義と同じ構文を使用するため、ファセットをネストしてグループ化のツリーをビルドできます。MongoDB Searchは、ネストされたファセットのバケットを、その親ファセットの各バケット内に返します。
ネストされたファセットを含むファセットの各バケットについて、MongoDB Searchはバケット内のドキュメント数を示すcountフィールドも返します。これらの中間バケットに対してcountメトリクスを指定する必要はありません。
ファセットは、レベル数に制限なくネストできます。ただし、以下の制限が適用されます。
aggregationsは、ネストされたファセットツリーのリーフファセットでのみ指定できます。facetsを指定するファセット定義では、aggregationsを指定することもできません。中間グループ化のメトリクスを計算するには、そのグループ化をaggregationsを持つ個別のトップレベルファセットとして指定し、ネストされたファセットは指定しません。ネストされたファセットに
countという名前を付けることはできません。MongoDB Search は、中間バケットのドキュメント数としてcountを予約しています。クエリが返すことができる一意のバケットの総数は、
100000を超えることはできません。1つのファセットツリーが生成するバケットを計算するには、そのネストされたブランチの各レベルにあるバケットの数を掛け合わせます。レベルごとのバケット数は、string ファセットの場合はnumBuckets、数値または日付ファセットの場合はboundariesとdefaultで定義されるバケット数になります。例として、20個のバケットをリクエストし、20個のバケットをリクエストするネストされたファセットを含むファセットは、400個の一意のバケットを生成します。各レベルでこの合計が乗算されるため、各レベルでより多くのバケットをリクエストすると、ネストできるレベルの数が減ります。
ファセット結果
ファセットクエリの場合、 MongoDB Search は、定義されたファセット名と、そのファセットのバケットの配列とのマッピングを結果に返します。ファセット結果ドキュメントには、ファセットの結果バケットの配列である buckets オプションが含まれています。配列内の各ファセットバケットドキュメントには、次のフィールドがあります。
オプション | タイプ | 説明 |
|---|---|---|
| オブジェクト | このファセット バケットを識別するユニークな識別子。この値は、ファセットされるデータ型と一致します。 |
| 整数 | このファセットバケット内のドキュメントの数。 |
ファセット定義で ファセット集計 が指定されている場合、各バケットドキュメントには、count フィールドではなく、aggregations ドキュメントで指定したメトリクスが含まれます。ファセット定義で ネストされたファセット が指定されている場合、各バケットドキュメントには、バケット内のドキュメント数を示す count フィールドと、ネストされたファセットの結果が含まれます。
複数選択ファセット
MongoDB Search を使用すると、同じファセット内の複数のバケットを同時に表示および選択できます。通常、ファセット内でバケットを選択すると、その選択に従って検索結果がフィルタリングされ、すべてのファセットのカウントが変更されます。
例
sample_airbnb.listingsコレクションのインデックス定義で、次のフィールドのファセットが指定されているとします。
cancellation_policyroom_typeaccommodates
cancellation_policyファセットには次のバケットがあります。
flexiblemoderatestrict_14_with_grace_periodsuper_strict_30super_strict_60
各バケットには、独自の結果カウントがあります。moderate cancellation_policy を検索すると、他の 4 つのバケットのカウントは 0 になります。さらに、room_type ファセットと accommodates ファセットのバケットのカウントは、同様に flexiblecancellation_policy を持つ各バケットの結果の数に減ります。
ファセットが検索結果のカウントに与える影響をより細かく制御する必要があるシナリオでは、ファセット クエリで doesNotAffectプロパティを使用して複数選択のファセットを有効にします。これらのファセットは引き続き結果をフィルタリングしますが、クエリは結果数を変更しません。
以下の演算子で doesNotAffect を指定できます。
複数のファセットを除外するには、ファセット名の配列を指定します。ほとんどのユースケースでは、フィルターとパスを共有するファセットのみを除外します。例として、rating フィールドに対する equals フィルターは、rating をパスとして使用するファセットの名前を指定します。
例
moderate cancellation_policy があるドキュメントのsample_airbnb.listingsAndReviews コレクションに対するクエリを検討します。doesNotAffect の値を cancellation_policy に指定すると、cancellation_policy ファセットのバケットのカウントは変更されませんが、他のファセットのバケットの結果カウントは、同様に moderatecancellation_policy を持つ各バケットの結果の数に減ります。
詳細については、複数選択ファセットの例を参照してください。
doesNotAffect を embeddedDocument スコープのファセットと組み合わせることはできません。詳細については、埋め込みドキュメント配列の一致する子に対するファセットを参照してください。
最後に、多くのファセットを持つユースケースでは、特定のファセットに影響する他のフィルターを制限できます。これを行うには、他のフィールドのファセットを含め、任意のフィルターの doesNotAffect プロパティで任意のファセットを指定します。これにより、どの選択がより迅速に、またはより緩やかに選択肢を絞り込むかを一目で確認できます。
例
accommodates 値が 3 であるドキュメントの sample_airbnb.listingsAndReviews コレクションに対するクエリを検討します。doesNotAffect の値として cancellation_policy を指定した場合、room_type バケットの結果数は、3 人も収容できる各バケット内の結果数に減少しますが、cancellation_policy のバケットの結果数は影響を受けません。
詳細については、「ファセット間フィルター除外の例」を参照してください。
SEARCH_META 集計変数
$search ステージを使用してクエリを実行すると、MongoDB Search はメタデータの結果を $$SEARCH_META 変数に保存し、検索結果のみを返します。サポートされているすべての集計パイプライン ステージで $$SEARCH_META 変数を使用して、$search クエリのメタデータ結果を表示できます。$$SEARCH_META 変数は、ファセット.集計 と一緒に使用することもできます。
MongoDB では、検索結果とメタデータ結果の両方が必要な場合にのみ $$SEARCH_META 変数を使用することを推奨します。それ以外の場合は、次を使用します。
$searchステージを使用して、検索結果のみを取得します。$searchMetaステージを使用して、メタデータ結果のみを取得します。
制限
ファセット クエリは単一のフィールドに対してのみ実行できます。フィールドのグループに対してファセット クエリを実行することはできません。
埋め込みスコープのファセットの制限事項
次の制限が 埋め込みドキュメント配列の一致する子に対するファセット: に適用されます。
同じクエリ内で、トップレベルの
returnScopeオプションとembeddedDocumentスコープのファセットを結合することはできません。embeddedDocumentスコープのファセットはカウントのみを返します。ドリルサイドウェイズファセット(
doesNotAffect)とembeddedDocumentスコープのファセットを同じクエリで組み合わせることはできません。
ファセット集計の制限事項
ファセット集計には、次の制限が適用されます。
aggregationsでは、次のオプションは使用できません。doesNotAffect複数選択ファセット用
次の BSON types: に対してファセットを実行したり、集計を計算したりすることはできません。
binDatabooldecimalnullobjectIdtimestamp
これらの型のいずれかでメトリクスを計算するには、ビューを使用して、インデックスを作成する前にフィールドをサポートされている型に変換します。
例
以下の例は サンプルデータ を用いています。メタデータ結果の例では、facet を使用して $searchMeta クエリを実行し、結果内のメタデータのみを検索する方法を示します。メタデータと検索結果の例では、facet と $SEARCH_META 集計変数を使用して $search クエリを実行し、検索結果とメタデータ結果の両方を検索する方法を示します。returnScope の例は、embeddedDocuments 型を使用して動的にインデックス化されたオブジェクト配列内のネストされたフィールドでファセットを作成する方法を示しています。埋め込みスコープのファセットの例では、embeddedDocuments 配列の一致する子のみでファセットを作成する方法を示します。複数選択およびファセット間のフィルター除外の例では、doesNotAffect を使用してファセットが互いのカウントに与える影響を制御する方法を示します。集計の例では各ファセットバケットのメトリクスを計算する方法を示し、ネストされたファセットの例では結果を2番目のフィールドでグループ化し、各バケットのメトリクスを計算する方法を示します。
学び続ける
詳しくは、 MongoDB Searchでファセットの使用方法 を参照してください。
MongoDB Search の facet( MongoDB Search 演算子) について詳しくは、コース と ビデオ でご覧ください。
コースで学ぶ
MongoDB Search でファセットの使用の詳細については、MongoDB Universityの Intro MongoDBコース の ユニット 9 を受講してください。1.5 時間のユニットには、 MongoDB Search の概要、 MongoDB Search インデックスの作成、複合演算子を使用した $search クエリの実行中、facet を使用した結果のグループ化に関するレッスンが含まれています。
ビデオで学ぶ
このビデオでは、クエリ内で数値と string facet (MongoDB Search 演算子)を作成して使用し、結果をグループ化してグループ内の結果の数を取得する方法について説明します。
所要時間: 11 分