조회 연산자
연산자는 이름 필드에서 달러 부호($) 접두부의 사용을 통해 식별됩니다.
선택기 구문에는 두 가지 코어 유형의 연산자가 포함되어 있습니다.
- 조합 연산자
- 조건 연산자
일반적으로 조합 연산자는 선택의 최상위 레벨에서 적용됩니다. 이 연산자는 조건을 결합하거나 조건의 조합을 하나의 선택기로 작성하기 위해 사용됩니다.
모든 명시적 연산자의 양식은 다음과 같습니다.
{
"$operator": "argument"
}
명시적 연산자가 없는 선택기에는 암시적 연산자가 포함된 것으로 간주됩니다. 정확한 암시적 연산자는 선택기 표현식의 구조를 통해 판별됩니다.
암시적 연산자
다음 목록에는 두 개의 암시적 연산자가 표시되어 있습니다.
- "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) 연산자를 제외한 모든 연산자는 명시적으로 표시되어야 합니다.
조합 연산자
조합 연산자는 선택기를 결합하기 위해 사용됩니다. 세 개의 조합 연산자($all, $allMatch 및 $elemMatch)를 통해 JSON 배열 관련 작업은 물론 대부분의 프로그래밍 언어에 존재하는 공통 부울 연산자 관련 작업을 수행할 수 있습니다.
조합 연산자에서는 하나의 인수를 사용합니다. 이 인수는 다른 선택기 또는 선택기의 배열입니다.
| 운영자 | 인수 | 용도 |
|---|---|---|
$all |
배열 | 인수 배열의 모든 요소가 포함된 경우 배열 값을 일치시킵니다. |
$allMatch |
선택기 | 지정된 모든 조회 기준과 일치하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다. |
$and |
배열 | 배열의 모든 선택기가 일치하는 경우 일치시킵니다. |
$elemMatch |
선택기 | 지정된 모든 조회 기준과 일치하는 요소가 하나 이상 존재하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다. |
$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 연산자는 제공된 조회 기준과 일치하는 요소가 하나 이상 존재하는 배열 필드가 포함된 모든 문서를 일치시킨 후 리턴합니다.
다음과 같이 $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 |
[제수, 나머지] | 제수 및 나머지는 모두 양의 정수 또는 음의 정수입니다. 정수가 아닌 값을 입력하면 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 연산자는 문서 필드가 제공된 목록에 반드시 존재하도록 요구합니다.
다음과 같이 $in 연산자를 사용하는 예제를 참조하십시오.
{
"selector": {
"year": {
"$in": [2010, 2015]
}
},
"fields": [
"year",
"_id",
"title"
],
"limit": 10
}
$nin
$nin 연산자는 문서 필드가 제공된 목록에 반드시 존재하지 않도록 요구합니다.
다음과 같이 $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이고 문서 필드가 정수인 경우에만 문서를 일치시킵니다. 제수 및 나머지는 정수여야 합니다. 제수 및 나머지는 양의 정수 또는 음의 정수가 될 수 있습니다. 나누는 수나 나머지가 정수가 아닌 쿼리의 경우 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
}