定義
rangerange演算子は、数値、日付、string 値のクエリとスコアリングをサポートしています。 この演算子を使用すると、特定の数値、日付、 ObjectId 、または文字(英数字)の範囲内の結果を検索できます。rangeは次のデータ型のクエリをサポートします。数値(
int32、int64、doubleなど)
構文
range の構文は次のとおりです。
{ "$search": { "index": <index name>, // optional, defaults to "default" "range": { "path": "<field-to-search>", "gt | gte": <value-to-search>, "lt | lte": <value-to-search>, "score": <score-options>, "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>] } }}オプション
range では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| BSON日付、数値、 string 、またはObjectId | no | |
| BSON日付、数値、 string 、またはObjectId | no | |
| 文字列または複数の文字列の配列 | インデックス付きフィールドまたは検索するフィールド。 | はい |
| オブジェクト | 一致する検索結果に割り当てられた スコア を変更します。 デフォルトのスコアは、次のオプションを使用して変更できます。
配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。 クエリで | no |
| 文字列または複数の文字列の配列 | このクエリに基づいてカウントの再計算から除外するファセットまたはファセットのリスト。値は、 | no |
例
次の例では、サンプル データのコレクションを使用します。クラスターにサンプル データをロードした場合は、以下の例のインデックス定義を使用してインデックスを作成し、クラスターで例クエリを実行できます。
数値の例
次の例では、サンプル データの数値フィールドのインデックスを使用し、インデックスフィールドに対してrangeクエリを実行します。
この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはgte lteフィールドと フィールドを使用して、検索する数値範囲を定義します。
サンプル インデックス
次のインデックス定義のいずれかを使用します。
サンプル クエリ
次のクエリでは、ランタイムが2以上で3以下の映画を検索します。 出力を5の結果に制限する$limitステージと、 titleとruntimeを除くすべてのフィールドを除外する$projectステージが含まれています。
db.movies.aggregate([ { "$search": { "range": { "path": "runtime", "gte": 2, "lte": 3 } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1, "runtime": 1 } }])この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはlteフィールドを使用して、指定された値以下のすべての値を検索します。
サンプル インデックス
次のインデックス定義のいずれかを使用します。
サンプル クエリ
次のクエリは、ランタイムが2以下であるすべての映画を検索します。 出力を5の結果に制限する$limitステージと、次の操作を行う$projectステージが含まれています。
titleとruntimeを除くすべてのフィールドを除外次のフィールドを追加:
score
db.movies.aggregate([ { "$search": { "range": { "path": "runtime", "lte": 2 } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1, "runtime": 1, score: { $meta: "searchScore" } } }])次の例では、 sample_analytics.customersコレクション内の数値の配列を持つフィールドを含む、すべての動的にインデックス可能なフィールドを動的にインデックス化します。 サンプル クエリでは、gte lteフィールドと フィールドを使用して、数値の配列内の指定された値の間にあるすべての値を検索します。
サンプル インデックス
次のdefaultという名前のインデックス定義は、数値の配列であるaccountsフィールドを含むすべてのフィールドを動的にインデックス化します。
{ "mappings": { "dynamic": true }}サンプル クエリ
次のクエリは、 250000から300000までのカスタマー アカウントを検索します。 出力を5の結果に制限する$limitステージと、 accountsとnameを除くすべてのフィールドを除外する$projectステージが含まれています。
db.customers.aggregate([ { "$search": { "range": { "path": "accounts", "gt": 250000, "lt": 400000 } } }, { "$limit": 5 }, { "$project": { "_id": 0, "accounts": 1, "name": 1 } }])日付の例
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内の日付フィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内のreleasedという名前のdate型フィールドにインデックスを付けることができます。
サンプル インデックス
次のインデックス定義のいずれかを使用します。
サンプル クエリ
次のクエリでは、 1年 1 月 日、 2010から 1 月1日2015の間に公開された映画を検索して、 出力を5の結果に制限する$limitステージと、 titleとreleasedを除くすべてのフィールドを除外する$projectステージが含まれています。
db.movies.aggregate([ { "$search": { "range": { "path": "released", "gt": ISODate("2010-01-01T00:00:00.000Z"), "lt": ISODate("2015-01-01T00:00:00.000Z") } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1, "released": 1 } }])ObjectId の例
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内のobjectIdフィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内の_idという名前のobjectId型フィールドにインデックスを付けることができます。
サンプル インデックス
次のインデックス定義のいずれかを使用します。
サンプル クエリ
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内のobjectId値の範囲を_idフィールドでクエリします。
db.movies.aggregate([ { "$search": { "range": { "path": "_id", "gte": ObjectId("573a1396f29313caabce4a9a"), "lte": ObjectId('573a1396f29313caabce4ae7') } } }, { "$project": { "_id": 1, "title": 1, "released": 1 } }])string例
次の例では、range 演算子を使用して、sample_mflix.moviesコレクション内の文字列フィールドをクエリします。 この例では、静的マッピングを使用して、コレクション内の title という名前のフィールドをMongoDB Search token タイプとしてインデックス必要があります。
サンプル インデックス
default という名前の次のインデックス定義は、moviesコレクション内の titleフィールドをMongoDB Search token タイプとしてインデックス化します。
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "token", "normalizer": "lowercase" } } }}サンプル クエリ
次のクエリは、 cityとcountryの間の文字を含む映画タイトルを検索します。 出力を5の結果に制限する$limitステージと、 titleを除くすべてのフィールドを除外する$projectステージが含まれています。
db.movies.aggregate([ { "$search": { "range": { "path": "title", "gt": "city", "lt": "country" } } }, { "$limit": 5 }, { "$project": { "_id": 0, "title": 1 } }])埋め込みドキュメントの例
次のクエリは、sample_training.companiesコレクションのfunding_rounds.raised_amountフィールドで、金額が500000以上1000000以下のものを検索します。returnStoredSource: trueとreturnScopeを使用して抽出し、mongot上で保存されたオブジェクトのfunding_rounds配列内のフィールドを返します。このクエリでは、「保存されたソースへの相対パスの使用」のサンプルインデックスを使用しています。
➤ Search Playground でこれを試してみてください。MongoDB Search Playground のデータは、次の例で使用されているサンプルコレクションよりも小さいため、MongoDB Search Playground の結果は異なる場合があります。
db.companies.aggregate([ { "$search": { "range": { "path": "funding_rounds.raised_amount", "gte": 500000, "lte": 1000000 }, "returnStoredSource": true, "returnScope": { "path": "funding_rounds" } } }, { "$limit": 5 }])メタデータの例
次のクエリは、上映時間が 2 以上で 3 以下の映画を検索します。このクエリは、$searchMeta ステージを使用して、検索条件に一致する次のバケット(年)内のすべての映画を検索します。
1990 (このバケットの下限値を含む)
2000: 1990 バケットの 排他的上限であり、このバケットの下限
2010: 2000 バケットの 排他的上限であり、このバケットの下限
2020: 2010 の排他的上限
クエリは、sample_mflix.movies 名前空間内のすべてのフィールドを動的にインデックス化する default という名前のインデックスを使用します。
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "runtime", "gte": 2, "lte": 3 } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1990, 2000, 2010, 2020 ] } } } } }])