範囲
定義
構文
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 } 10 } 11 }
オプション
range
では、次の用語を使用してクエリを作成します。
フィールド | タイプ | 説明 | 必要性 |
---|---|---|---|
gt or gte | BSON日付、数値、 string 、またはObjectId | no | |
lt or lte | BSON日付、数値、 string 、またはObjectId | no | |
path | 文字列または複数の文字列の配列 | インデックス付きフィールドまたは検索するフィールド。 「パス構築 」を参照してください。 | はい |
score | オブジェクト | 一致する検索結果に割り当てられた スコア を変更します。 デフォルトのスコアは、次のオプションを使用して変更できます。
配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。 クエリで | no |
例
次の例では、サンプル データの コレクションを使用します。 クラスターにサンプル データをロードすると、以下の例のインデックス定義を使用してインデックスを作成し、クラスターでサンプル クエリを実行できます。
Tip
サンプル データセットをすでに読み込んでいる場合は、「Atlas Search スタートガイド」チュートリアルに従って、インデックスの定義を作成し、Atlas Search クエリを実行します。
数値の例
次の例では、サンプル データの数値フィールドのインデックスを使用し、インデックス フィールドに対してrange
クエリを実行します。
この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 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
コレクション内の string フィールドをクエリします。 この例では、静的マッピングを使用して、 コレクション内のtitle
という名前のフィールドを Atlas Search token
タイプとしてインデックス化する必要があります。
サンプル インデックス
default
という名前の次のインデックス定義は、 movies
コレクション内のtitle
フィールドを Atlas 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' } ]