照会演算子
演算子は、名前フィールドでドル記号 ($) 接頭部を使用して識別されます。
セレクター構文には、以下の 2 つのコア・タイプの演算子があります。
- 組み合わせ演算子
- 条件演算子
一般に、組み合わせ演算子は最上位の選択レベルで適用されます。 これらは 1 つのセレクターに条件を結合したり、条件の組み合わせを作成したりするために使用されます。
すべての明示的な演算子の形式は以下のとおりです。
{
"$operator": "argument"
}
明示的な演算子のないセレクターは、暗黙的な演算子を持つと見なされます。 正確な暗黙的演算子は、セレクター式の構造によって決まります。
暗黙的な演算子
2 つの暗黙的な演算子を以下のリストに示します。
- "Equality"
- 「そして
セレクターでは、JSON 値を含むが、その中に演算子がないフィールドは、等価条件と見なされます。 暗黙的な等価テストは、フィールドおよびサブフィールドにも適用されます。
条件演算子の引数ではない JSON オブジェクトは、各フィールドの暗黙的な $and 演算子です。
year フィールドの値が 2010 より大きい任意の文書と突き合わせるために演算子を使用するセレクターの例を以下に示します。
{
"selector": {
"year": {
"$gt": 2010
}
}
}
以下の例では、一致する文書に director というフィールドがあり、かつ そのフィールドの値が Lars von Trier と完全に等しい必要があります。
暗黙的な等価演算子の例を以下に示します。
{
"director": "Lars von Trier"
}
以下の例に示すように、等価演算子を明示的にすることもできます。
明示的な等価演算子の例を以下に示します。
{
"director": {
"$eq": "Lars von Trier"
}
}
サブフィールドを使用する以下の例では、一致する文書内のフィールド imdb にもサブフィールド * がある必要がありrating、かつそのサブフィールドの値が 8 である必要があります*。
サブフィールド・テストに適用される暗黙的な演算子の例を以下に示します。
{
"imdb": {
"rating": 8
}
}
等価演算子を明示的にすることができます。
明示的な等価演算子の例を以下に示します。
{
"selector": {
"imdb": {
"rating": { "$eq": 8 }
}
}
}
フルテキスト索引付けで使用される $eq 演算子の例を以下に示します。
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"title:string"
],
"fields": [
"title"
]
}
$eq フィールドで索引付けされたデータベースで使用される year 演算子の例を以下に示します。
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
以下の例では、フィールドdirectorが存在し、以下の値を含んでいる必要があります。 Lars von Trierおよびフィールドyearが存在し、値が2003でなければなりません。
暗黙的な $and 演算子の例を以下に示します。
{
"director": "Lars von Trier",
"year": 2003
}
$and 演算子と等価演算子の両方を明示的にすることができます。
明示的な $and 演算子と $eq 演算子を使用する例を以下に示します。
{
"$and": [
{
"director": {
"$eq": "Lars von Trier"
}
},
{
"year": {
"$eq": 2003
}
}
]
}
明示的な演算子
$eq (等価) および $and (AND) 演算子以外のすべての演算子は、明示的に指定する必要があります。
組み合わせ演算子
組み合わせ演算子は、セレクターを結合するために使用されます。 3 つの組み合わせ演算子 ($all、$allMatch、および $elemMatch) は、ほとんどのプログラミング言語にある一般的なブール演算子に加えて、JSON 配列の処理に役立ちます。
組み合わせ演算子は、単一の引数を取ります。 この引数は、別のセレクターまたはセレクターの配列のいずれかです。
| オペレーター | 引数 | 目的 |
|---|---|---|
$all |
配列 | 引数配列のすべての要素を含む配列値に一致します。 |
$allMatch |
セレクター | すべての要素が指定されたすべての照会基準に一致する配列フィールドを含むすべての文書に一致し、それらの文書を返します。 |
$and |
配列 | 配列内のすべてのセレクターが一致する場合に一致します。 |
$elemMatch |
セレクター | 指定されたすべての照会基準に一致する要素が少なくとも 1 つある配列フィールドを含むすべての文書に一致し、それらの文書を返します。 |
$nor |
配列 | 配列内のいずれのセレクターも一致しない場合に一致します。 |
$not |
セレクター | セレクターが一致しない場合に一致します。 |
$or |
配列 | 配列内のいずれかのセレクターが一致する場合に一致します。 すべてのセレクターが同じ索引を使用する必要があります。 |
$all
$all 演算子は、引数配列のすべて の要素を含む配列値に一致します。
$all 演算子を使用する例を以下に示します。
{
"selector": {
"genre": {
"$all": ["Comedy","Short"]
}
},
"fields": [
"title",
"genre"
],
"limit": 10
}
$allMatch
$allMatch 演算子は、配列フィールドのすべての要素が指定された照会基準に一致する配列フィールドを含むすべての文書に一致し、それらの文書を返します。
$allMatch 演算子を使用する例を以下に示します。
{
"genre": {
"$allMatch": {
"$eq": "Horror"
}
}
}
$and
$and 演算子は、配列内のすべてのセレクターが一致する場合に一致します。
$and 演算子を使用する例を以下に示します。
{
"selector": {
"$and": [
{
"year": {
"$in": [2014, 2015]
}
},
{
"genre": {
"$all": ["Comedy","Short"]
}
}
]
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$elemMatch
$elemMatch 演算子は、指定された照会基準に一致する要素が少なくとも 1 つある配列フィールドを含むすべての文書に一致し、それらの文書を返します。
$elemMatch 演算子を使用する例を以下に示します。
{
"selector": {
"genre": {
"$elemMatch": {
"$eq": "Horror"
}
}
},
"fields": [
"title",
"genre"
],
"limit": 10
}
$nor
$nor 演算子は、セレクターが一致していない 場合に一致します。
$nor 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gte": 1900,
"$lte": 1910
},
"$nor": [
{ "year": 1901 },
{ "year": 1905 },
{ "year": 1907 }
]
},
"fields": [
"title",
"year"
]
}
$not
$not 演算子は、セレクターが値 * に解決*されないtrue場合に一致します。
$not 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gte": 1900,
"$lte": 1903
},
"$not": {
"year": 1901
}
},
"fields": [
"title",
"year"
]
}
$or
$or 演算子は、配列内のいずれかのセレクターが一致する場合に一致します。
$or 演算子を使用する例を以下に示します。
{
"selector": {
"year": 1977,
"$or": [
{ "director": "George Lucas" },
{ "director": "Steven Spielberg" }
]
},
"fields": [
"title",
"director",
"year"
]
}
条件演算子
条件演算子はフィールドに固有であり、そのフィールドに格納されている値を評価するために使用されます。 例えば、
$eq 演算子は、指定されたフィールドに、指定された引数と等しい値が含まれている場合に一致します。
ほとんどのプログラミング言語に共通の基本的な等価演算子および非等価演算子がサポートされています。 一部の「メタ」条件演算子も使用できます。
一部の条件演算子は、有効な JSON コンテンツを引数として受け入れます。 その他の条件演算子では、引数が特定の JSON 形式でなければなりません。
| オペレーターのタイプ | オペレーター | 引数 | 目的 |
|---|---|---|---|
| (非) 等価 | $lt |
任意の JSON | フィールドは引数未満です。 |
$lte |
任意の JSON | フィールドは引数以下です。 | |
$eq |
任意の JSON | フィールドは引数と等しいです。 | |
$ne |
任意の JSON | フィールドは引数と等しくありません。 | |
$gte |
任意の JSON | フィールドは引数以上です。 | |
$gt |
任意の JSON | フィールドは引数より大きいです。 | |
| オブジェクト | $exists |
ブール値 | フィールドが存在するかどうかを、その値に関係なく確認します。 |
$type |
ストリング | 文書フィールドのタイプを確認します。 受け入れられる値は、null、boolean、number、string、array、および object です。 |
|
| 配列 | $in |
JSON 値の配列 | 指定されたリストに文書フィールドが存在しなければなりません。 |
$nin |
JSON 値の配列 | 指定されたリストに文書フィールドが存在してはなりません。 | |
$size |
整数 | 文書内の配列フィールドの長さに一致する特殊な条件。 非配列フィールドはこの条件に一致しません。 | |
| 各種 | $mod |
[除数、剰余] | Divisor と Remainder は、両方とも正または負の整数です。 整数以外の値が指定された場合、 404ステータスが返されます。 式 (field % Divisor == Remainder) が true で文書フィールドが整数である文書に一致します。 |
$regex |
ストリング | 文書フィールドと突き合わせる正規表現パターン。 フィールドがストリング値であり、指定された正規表現に一致する場合にのみ一致します。 |
正規表現は索引では機能しないため、大規模なデータ・セットのフィルタリングには使用しないでください。 ただし、partial index <find/partial_indexes>を制限するために使用できます。
$lt
$lt 演算子は、指定されたフィールドの内容が引数より小さい場合に一致します。
フルテキスト索引付けで $lt 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$lt": 1900
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
$lt フィールドで索引付けされたデータベースで year 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$lt": 1900
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$lte
$lte 演算子は、指定されたフィールドの内容が引数以下の場合に一致します。
フルテキスト索引付けで $lte 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$lte": 1900
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
$lte フィールドで索引付けされたデータベースで year 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$lte": 1900
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$eq
$eq 演算子は、指定されたフィールドの内容が指定された引数と等しい場合に一致します。
フルテキスト索引付けで $eq 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"title:string"
],
"fields": [
"title"
]
}
$eq フィールドで索引付けされたデータベースで year 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$eq": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$ne
$ne 演算子は、指定されたフィールドの内容が指定された引数と等しくない場合に一致します。
$ne タイプの索引を使用する場合、json 演算子をセレクターの基本 (最下位) 要素にすることはできません。
フルテキスト索引付けで $ne 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$ne": 1892
}
},
"fields": [
"year"
],
"sort": [
"year:number"
]
}
1 次索引で $ne 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$ne": 1892
}
},
"fields": [
"year"
],
"limit": 10
}
$gte
$gte 演算子は、指定されたフィールドの内容が引数以上の場合に一致します。
フルテキスト索引付けで $gte 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gte": 2001
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
$gte フィールドで索引付けされたデータベースで year 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gte": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$gt
$gt 演算子は、指定されたフィールドの内容が引数より大きい場合に一致します。
フルテキスト索引付けで $gt 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gt": 2001
}
},
"sort": [
"year:number",
"title:string"
],
"fields": [
"year",
"title"
]
}
$gt フィールドで索引付けされたデータベースで year 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$gt": 2001
}
},
"sort": [
"year"
],
"fields": [
"year"
]
}
$exists
$exists 演算子は、その値に関係なく、フィールドが存在する場合に一致します。
$exists 演算子を使用する例を以下に示します。
{
"selector": {
"year": 2015,
"title": {
"$exists": true
}
},
"fields": [
"year",
"_id",
"title"
]
}
$type
$type 演算子では、指定された文書フィールドが正しいタイプである必要があります。
$type 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$type": "number"
}
},
"fields": [
"year",
"_id",
"title"
]
}
$in
$in 演算子では、指定されたリストに文書フィールド must が存在している必要があります。
$in 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$in": [2010, 2015]
}
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$nin
$nin 演算子では、指定されたリストに文書フィールド not が存在している必要があります。
$nin 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$nin": [2010, 2015]
}
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$size
$size 演算子は、文書内の配列フィールドの長さに一致します。
$size 演算子を使用する例を以下に示します。
{
"selector": {
"genre": {
"$size": 4
}
},
"fields": [
"title",
"genre"
],
"limit": 25
}
$mod
$mod 演算子は、式 (field % Divisor == Remainder) が true で文書フィールドが整数である文書に一致します。 Divisor と Remainder は整数でなければなりません。 正または負の整数を使用できます。 除数または余りが整数でないクエリでは、 404ステータスが返されます。
除数または余りに負の整数値を指定した場合、IBM® Cloudant® for IBM Cloud® $mod 演算子では、切り捨て除算が行われます Erlangの rem におけるモジュロ演算子 と % C言語の演算子 の両方は、 同様の動作をします。
$mod 演算子を使用する例を以下に示します。
{
"selector": {
"year": {
"$mod": [100,0]
}
},
"fields": [
"title",
"year"
],
"limit": 50
}
$regex
$regex 演算子は、フィールドがストリング値であり、かつ 指定された正規表現に一致する場合に一致します。
$regex 演算子を使用する例を以下に示します。
{
"selector": {
"cast": {
"$elemMatch": {
"$regex": "^Robert"
}
}
},
"fields": [
"title",
"cast"
],
"limit": 10
}