定義
構文
range の構文は次のとおりです。
1 { 2 "$search": { 3 "index": <index name>, // optional, defaults to "default" 4 "range": { 5 "path": "<field-to-search>", 6 "gt | gte": <value-to-search>, 7 "lt | lte": <value-to-search>, 8 "score": <score-options>, 9 "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>] 10 } 11 } 12 }
オプション
range では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| BSON日付、数値、 string 、またはObjectId | no | |
| BSON日付、数値、 string 、またはObjectId | no | |
| 文字列または複数の文字列の配列 | インデックス付きフィールドまたは検索するフィールド。 | はい |
| オブジェクト | 一致する検索結果に割り当てられた スコア を変更します。 デフォルトのスコアは、次のオプションを使用して変更できます。
配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。 クエリで | no |
| 文字列または複数の文字列の配列 | このクエリに基づいてカウントの再計算から除外するファセットまたはファセットのリスト。値は、 | no |
例
The following examples use the collection in the sample data. If you loaded the sample data on your cluster, you can create the indexes using the index definitions in the examples below and run the example queries on your cluster.
数値の例
The following examples use indexes on numeric fields in the sample data and run range queries against the indexed fields.
この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはgte lteフィールドと フィールドを使用して、検索する数値範囲を定義します。
サンプル インデックス
defaultという名前の次のインデックス定義は、 moviesコレクション内のすべてのフィールドにインデックスを作成します。
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
defaultという名前の次のインデックス定義は、 moviesコレクション内のruntimeフィールドのみをインデックス化します。
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
サンプル クエリ
次のクエリでは、ランタイムが2以上で3以下の映画を検索します。 出力を5の結果に制限する$limitステージと、 titleとruntimeを除くすべてのフィールドを除外する$projectステージが含まれています。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "gte": 2, 7 "lte": 3 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "runtime": 1 19 } 20 } 21 ])
{ "runtime" : 3, "title" : "Dots" } { "runtime" : 3, "title" : "Sisyphus" } { "runtime" : 3, "title" : "The Fly" } { "runtime" : 2, "title" : "Andrè and Wally B." } { "runtime" : 2, "title" : "Luxo Jr." }
この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはlteフィールドを使用して、指定された値以下のすべての値を検索します。
サンプル インデックス
defaultという名前の次のインデックス定義は、 moviesコレクション内のruntimeフィールドにインデックスを作成します。
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "runtime": { 6 "type": "number" 7 } 8 } 9 } 10 }
サンプル クエリ
次のクエリは、ランタイムが2以下であるすべての映画を検索します。 出力を5の結果に制限する$limitステージと、次の操作を行う$projectステージが含まれています。
titleとruntimeを除くすべてのフィールドを除外次のフィールドを追加:
score
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "runtime", 6 "lte": 2 7 } 8 } 9 }, 10 { 11 "$limit": 5 12 }, 13 { 14 "$project": { 15 "_id": 0, 16 "title": 1, 17 "runtime": 1, 18 score: { $meta: "searchScore" } 19 } 20 } 21 ])
{ "runtime" : 1, "title" : "Blacksmith Scene", "score" : 1 } { "runtime" : 2, "title" : "Andrè and Wally B.", "score" : 1 } { "runtime" : 2, "title" : "Luxo Jr.", "score" : 1 } { "runtime" : 1, "title" : "The Kiss", "score" : 1 } { "runtime" : 1, "title" : "Dickson Experimental Sound Film", "score" : 1 }
次の例では、 sample_analytics.customersコレクション内の数値の配列を持つフィールドを含む、すべての動的にインデックス可能なフィールドを動的にインデックス化します。 サンプル クエリでは、gte lteフィールドと フィールドを使用して、数値の配列内の指定された値の間にあるすべての値を検索します。
サンプル インデックス
次のdefaultという名前のインデックス定義は、数値の配列であるaccountsフィールドを含むすべてのフィールドを動的にインデックス化します。
{ "mappings": { "dynamic": true } }
サンプル クエリ
次のクエリは、 250000から300000までのカスタマー アカウントを検索します。 出力を5の結果に制限する$limitステージと、 accountsとnameを除くすべてのフィールドを除外する$projectステージが含まれています。
1 db.customers.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "accounts", 6 "gt": 250000, 7 "lt": 400000 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "accounts": 1, 18 "name": 1 19 } 20 } 21 ])
1 [ 2 { 3 name: 'Elizabeth Ray', 4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ] 5 }, 6 { 7 name: 'Katherine David', 8 accounts: [ 462501, 228290, 968786, 515844, 377292 ] 9 }, 10 { 11 name: 'Brad Cardenas', 12 accounts: [ 721914, 817222, 973067, 260799, 87389 ] 13 }, 14 { 15 name: 'Gary Nichols', 16 accounts: [ 385397, 337979, 325377, 440243, 586395, 86702 ] 17 }, 18 { name: 'Jennifer Lawrence', accounts: [ 344885, 839927, 853542 ] } 19 ]
日付の例
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内の日付フィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内のreleasedという名前のdate型フィールドにインデックスを付けることができます。
サンプル インデックス
次のdefaultという名前のインデックス定義は、 date型であるreleasedフィールドを含む、 moviesコレクション内のすべての動的にインデックス可能なフィールドをインデックス化します。
{ "mappings": { "dynamic": true } }
defaultという名前の次のインデックス定義は、 moviesコレクション内のreleasedフィールドにインデックスを作成します。
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
サンプル クエリ
次のクエリでは、 1年 1 月 日、 2010から 1 月1日2015の間に公開された映画を検索して、 出力を5の結果に制限する$limitステージと、 titleとreleasedを除くすべてのフィールドを除外する$projectステージが含まれています。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "released", 6 "gt": ISODate("2010-01-01T00:00:00.000Z"), 7 "lt": ISODate("2015-01-01T00:00:00.000Z") 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "released": 1 19 } 20 } 21 ])
1 [ 2 { 3 title: 'Too Much Johnson', 4 released: ISODate('2014-08-30T00:00:00.000Z') 5 }, 6 { 7 title: 'Stolen Desire', 8 released: ISODate('2012-07-01T00:00:00.000Z') 9 }, 10 { 11 title: 'The Monkey King', 12 released: ISODate('2012-01-12T00:00:00.000Z') 13 }, 14 { title: 'The Land', released: ISODate('2012-08-04T00:00:00.000Z') }, 15 { 16 title: 'My Childhood', 17 released: ISODate('2013-07-31T00:00:00.000Z') 18 } 19 ]
ObjectId の例
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内のobjectIdフィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内の_idという名前のobjectId型フィールドにインデックスを付けることができます。
サンプル インデックス
defaultという名前の次のインデックス定義は、 moviesコレクション内のすべてのフィールドにインデックスを作成します。
次のdefaultという名前のインデックス定義は、 objectId型である_idフィールドを含む、 moviesコレクション内のすべての動的にインデックス可能なフィールドをインデックス化します。
{ "mappings": { "dynamic": true } }
defaultという名前の次のインデックス定義は、 moviesコレクション内の_idフィールドにインデックスを作成します。
{ "mappings": { "dynamic": false, "fields": { "_id": { "type": "objectId" } } } }
サンプル クエリ
次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内のobjectId値の範囲を_idフィールドでクエリします。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "_id", 6 "gte": ObjectId("573a1396f29313caabce4a9a"), 7 "lte": ObjectId('573a1396f29313caabce4ae7') 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "title": 1, 15 "released": 1 16 } 17 } 18 ])
1 [ 2 { 3 _id: ObjectId('573a1396f29313caabce4a9a'), 4 title: 'The Godfather', 5 released: ISODate('1972-03-24T00:00:00.000Z') 6 }, 7 { 8 _id: ObjectId('573a1396f29313caabce4a9b'), 9 title: 'Get to Know Your Rabbit', 10 released: ISODate('1972-06-01T00:00:00.000Z') 11 }, 12 { 13 _id: ObjectId('573a1396f29313caabce4aad'), 14 title: 'The Tall Blond Man with One Black Shoe', 15 released: ISODate('1973-08-30T00:00:00.000Z') 16 }, 17 { 18 _id: ObjectId('573a1396f29313caabce4abe'), 19 title: 'The Great Northfield Minnesota Raid', 20 released: ISODate('1972-05-12T00:00:00.000Z') 21 }, 22 { 23 _id: ObjectId('573a1396f29313caabce4ac4'), 24 title: 'The Heartbreak Kid', 25 released: ISODate('1973-02-01T00:00:00.000Z') 26 }, 27 { 28 _id: ObjectId('573a1396f29313caabce4ac7'), 29 title: 'Gumshoe', 30 released: ISODate('1971-12-01T00:00:00.000Z') 31 }, 32 { 33 _id: ObjectId('573a1396f29313caabce4ad9'), 34 title: 'Heat', 35 released: ISODate('1972-10-06T00:00:00.000Z') 36 }, 37 { 38 _id: ObjectId('573a1396f29313caabce4ae7'), 39 title: 'Horror Express', 40 released: ISODate('1973-12-01T00:00:00.000Z') 41 } 42 ]
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ステージが含まれています。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "title", 6 "gt": "city", 7 "lt": "country" 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1 18 } 19 } 20 ])
[ { title: 'Civilization' }, { title: 'Clash of the Wolves' }, { title: 'City Lights' }, { title: 'Comradeship' }, { title: 'Come and Get It' } ]
埋め込みドキュメントの例
次のクエリは、sample_training.companiesコレクションのfunding_rounds.raised_amountフィールドで、金額が500000以上1000000以下のものを検索します。returnStoredSource: trueとreturnScopeを使用して抽出し、mongot上で保存されたオブジェクトのfunding_rounds配列内のフィールドを返します。このクエリでは、「保存されたソースへの相対パスの使用」のサンプルインデックスを使用しています。
➤ Search Playground でこれを試してみてください。MongoDB Search Playground のデータは、次の例で使用されているサンプルコレクションよりも小さいため、MongoDB Search Playground の結果は異なる場合があります。
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "range": { 5 "path": "funding_rounds.raised_amount", 6 "gte": 500000, 7 "lte": 1000000 8 }, 9 "returnStoredSource": true, 10 "returnScope": { 11 "path": "funding_rounds" 12 } 13 } 14 }, 15 { 16 "$limit": 5 17 } 18 ])
[ { round_code: 'angel', raised_amount: 500000, raised_currency_code: 'USD' }, { round_code: 'angel', raised_amount: 800000, raised_currency_code: 'USD' }, { round_code: 'c', raised_amount: 1000000, raised_currency_code: 'USD' }, { round_code: 'seed', raised_amount: 1000000, raised_currency_code: 'USD' }, { round_code: 'a', raised_amount: 1000000, raised_currency_code: 'USD' } ]
メタデータの例
次のクエリは、上映時間が 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 ] } } } } } ])
[ { count: { lowerBound: Long('15') }, facet: { yearFacet: { buckets: [ { _id: 1990, count: Long('2') }, { _id: 2000, count: Long('3') }, { _id: 2010, count: Long('5') } ] } } } ]