AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

range (MongoDB Search 演算子)

range

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

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

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

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

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

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

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

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

no

lt or lte

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

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

  • 数値フィールドの場合、値はint32 、 int64 、または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

次の例では、サンプル データのコレクションを使用します。クラスターにサンプル データをロードした場合は、以下の例のインデックス定義を使用してインデックスを作成し、クラスターで例クエリを実行できます。

次の例では、サンプル データの数値フィールドのインデックスを使用し、インデックスフィールドに対してrangeクエリを実行します。

この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはgte lteフィールドと フィールドを使用して、検索する数値範囲を定義します。

Use one of the following index definitions:

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

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])

この例では、静的マッピングまたは動的マッピングのいずれかを使用して、 sample_mflix.moviesコレクションのruntimeフィールドにインデックスを付けることができます。 クエリはlteフィールドを使用して、指定された値以下のすべての値を検索します。

Use one of the following index definitions:

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

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])

次の例では、 sample_analytics.customersコレクション内の数値の配列を持つフィールドを含む、すべての動的にインデックス可能なフィールドを動的にインデックス化します。 サンプル クエリでは、gte lteフィールドと フィールドを使用して、数値の配列内の指定された値の間にあるすべての値を検索します。

次のdefaultという名前のインデックス定義は、数値の配列であるaccountsフィールドを含むすべてのフィールドを動的にインデックス化します。

{
"mappings": {
"dynamic": true
}
}

次のクエリは、 250000から300000までのカスタマー アカウントを検索します。 出力を5の結果に制限する$limitステージと、 accountsとnameを除くすべてのフィールドを除外する$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])

次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内の日付フィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内のreleasedという名前のdate型フィールドにインデックスを付けることができます。

Use one of the following index definitions:

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

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])

次の例では、 range演算子を使用して、 sample_mflix.moviesコレクション内のobjectIdフィールドをクエリします。 この例では、静的マッピングまたは動的マッピングのいずれかを使用して、コレクション内の_idという名前のobjectId型フィールドにインデックスを付けることができます。

Use one of the following index definitions:

次の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])

次の例では、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ステージが含まれています。

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])

次のクエリは、sample_training.companiesコレクションのfunding_rounds.raised_amountフィールドで、金額が500000以上1000000以下のものを検索します。returnStoredSource: trueとreturnScopeを使用して抽出し、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])

次のクエリは、上映時間が 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 ]
}
}
}
}
}
])