Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

range (MongoDB Search 演算子)

range

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

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

  • 数値int32int64doubleなど)

  • date

  • MongoDB 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 "doesNotAffect": "<facet-to-exclude>" | [<array-of-facets>]
10 }
11 }
12}

range では、次の用語を使用してクエリを作成します。

フィールド
タイプ
説明
必要性

gt or gte

BSON日付、数値、 string 、またはObjectId

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

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

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

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

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

no

lt or lte

BSON日付、数値、 string 、またはObjectId

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

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

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

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

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

no

path

文字列または複数の文字列の配列

インデックス付きフィールドまたは検索するフィールド。

はい

score

オブジェクト

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

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

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

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

配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。

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

no

doesNotAffect

文字列または複数の文字列の配列

このクエリに基づいてカウントの再計算から除外するファセットまたはファセットのリスト。値は、$search.facets または $searchMeta.facets で定義されたファセットの 1 つ以上の名前である必要があります。演算子は、指定されたファセットを使用してこのクエリに一致するドキュメントをフィルタリングしますが、それらのカウントを再計算しません。詳細については、「 複数選択ファセット 」を参照してください。

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ステージと、 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コレクション内の文字列フィールドをクエリします。 この例では、静的マッピングを使用して、コレクション内の title という名前のフィールドをMongoDB Search token タイプとしてインデックス必要があります。

default という名前の次のインデックス定義は、moviesコレクション内の titleフィールドをMongoDB 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' }
]

次のクエリは、sample_training.companiesコレクションのfunding_rounds.raised_amountフィールドで、金額が500000以上1000000以下のものを検索します。returnStoredSource: truereturnScopeを使用して抽出し、mongot上で保存されたオブジェクトのfunding_rounds配列内のフィールドを返します。このクエリでは、「保存されたソースへの相対パスの使用」のサンプルインデックスを使用しています。

Search Playground でこれを試してみてください。MongoDB Search Playground のデータは、次の例で使用されているサンプルコレクションよりも小さいため、MongoDB Search Playground の結果は異なる場合があります。

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

戻る

queryString

項目一覧