Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

範囲

項目一覧

  • 定義
  • 構文
  • オプション
  • 数値の例
  • 日付の例
  • ObjectId の例
  • string例
range

range演算子は、数値、日付、string 値のクエリとスコアリングをサポートしています。 この演算子を使用すると、特定の数値、日付、 ObjectId 、または文字(英数字)の範囲内の結果を検索できます。

range は次のデータ型のクエリをサポートします。

  • 数値int32int64doubleなど)

  • date

  • Atlas Search トークン タイプとしてインデックス付けされた string

  • objectId

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

指定された値より大きい( > )または 以上の値( >= )を検索します。

  • 数値フィールドの場合、値はint32int64 、またはdoubleデータ型になります。

  • 日付フィールドの場合、値は ISODate形式の日付である必要があります。

  • string フィールドの場合、値は Atlas Search tokenタイプとしてインデックス付けする必要があります。

  • ObjectId フィールドの場合、値はObjectIdデータ型としてインデックス付けされるか、動的マッピングtrue に設定する必要があります。

no
lt or lte
BSON日付、数値、 string 、またはObjectId

指定された値より小さい( < )または 以下の値( <= )を検索します。

  • 数値フィールドの場合、値はint32int64 、またはdoubleデータ型になります。

  • 日付フィールドの場合、値はISODate形式の日付である必要があります。

  • string フィールドの場合、値は Atlas Search tokenタイプとしてインデックス付けする必要があります。

  • ObjectId フィールドの場合、値はObjectIdデータ型としてインデックス付けされるか、動的マッピングtrue に設定する必要があります。

no
path
文字列または複数の文字列の配列
インデックス付きフィールドまたは検索するフィールド。 「パス構築 」を参照してください。
はい
score
オブジェクト

一致する検索結果に割り当てられた スコア を変更します。 デフォルトのスコアは、次のオプションを使用して変更できます。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 結果のスコアを指定された式で置き換えます。

配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。

クエリで score を使用する方法については、「結果内のドキュメントのスコアリング」を参照してください。

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ステージと、 titleruntimeを除くすべてのフィールドを除外する$projectステージが含まれています。

1db.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ステージが含まれています。

  • titleruntimeを除くすべてのフィールドを除外

  • 次のフィールドを追加: score

1db.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ステージと、 accountsnameを除くすべてのフィールドを除外する$projectステージが含まれています。

1db.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ステージと、 titlereleasedを除くすべてのフィールドを除外する$projectステージが含まれています。

1db.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]

次の例では、 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フィールドでクエリします。

1db.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]

次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内の string フィールドをクエリします。 この例では、静的マッピングを使用して、 コレクション内のtitleという名前のフィールドを Atlas Search tokenタイプとしてインデックス化する必要があります。

defaultという名前の次のインデックス定義は、 moviesコレクション内のtitleフィールドを Atlas Search tokenタイプとしてインデックス化します。

{
"mappings": {
"dynamic": false,
"fields": {
"title": {
"type": "token",
"normalizer": "lowercase"
}
}
}
}

次のクエリは、 citycountryの間の文字を含む映画タイトルを検索します。 出力を5の結果に制限する$limitステージと、 titleを除くすべてのフィールドを除外する$projectステージが含まれています。

1db.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' }
]

戻る

queryString