Cosmos DB(Azure 및 패브릭)는 복잡한 쿼리 및 데이터 조작을 수행할 수 있는 포괄적인 연산자 집합을 지원합니다. 이러한 연산자는 비트, 같음 및 비교, 논리 및 삼중/병합 연산자를 포함하며, 각 연산자는 쿼리 생성 및 데이터 처리에서 특정 용도로 사용됩니다.
비트 연산자
비트 연산자는 JSON 결과 집합을 생성할 때 정수 값에 대해 하위 수준 연산을 수행하는 데 유용합니다. 이러한 연산자는 C# 및 JavaScript와 같은 상위 수준의 프로그래밍 언어에서 유사한 연산자와 유사하게 작동합니다. C# 비트 연산자의 예는 비트 및 시프트 연산자를 참조하세요.
다음 표에서는 NoSQL용 API에서 지원되는 비트 연산에 대해 설명합니다.
| 수술 | Operator | Description |
|---|---|---|
| 왼쪽 시프트 | << |
왼쪽 값을 지정된 비트 수만큼 왼쪽으로 이동합니다. |
| 오른쪽 시프트 | >> |
왼쪽 값을 지정된 비트 수만큼 오른쪽으로 이동합니다. |
| 0 채우기(부호 없는) 오른쪽 시프트 | >>> |
왼쪽에서 가장 왼쪽 비트를 채우지 않고 지정된 비트 수만큼 왼쪽 값을 오른쪽으로 이동합니다. |
| 그리고 | & |
비트 논리 AND를 계산합니다. |
| OR | | |
비트 논리 OR를 계산합니다. |
| XOR | ^ |
비트 논리 배타 OR를 계산합니다. |
예시
다음 쿼리는 각 비트 연산자를 보여 줍니다.
SELECT
(100 >> 2) AS rightShift,
(100 << 2) AS leftShift,
(100 >>> 0) AS zeroFillRightShift,
(100 & 1000) AS logicalAnd,
(100 | 1000) AS logicalOr,
(100 ^ 1000) AS logicalExclusiveOr
이 쿼리는 다음 결과를 반환합니다.
[
{
"rightShift": 25,
"leftShift": 400,
"zeroFillRightShift": 100,
"logicalAnd": 96,
"logicalOr": 1004,
"logicalExclusiveOr": 908
}
]
중요합니다
Cosmos DB의 비트 연산자는 JavaScript의 비트 연산자와 동일한 동작을 따릅니다. JavaScript는 숫자를 64비트 부동 소수점 숫자로 저장하지만 모든 비트 연산은 32비트 이진 번호에서 수행됩니다. 비트 연산을 수행하기 전에 JavaScript는 숫자를 부호 있는 32비트 정수로 변환합니다. 비트 연산이 수행되면 결과가 64비트 JavaScript 숫자로 다시 변환됩니다. JavaScript의 비트 연산자에 대한 자세한 내용은 Mozilla MDN(Developer Network) Web Docs의 JavaScript 이진 비트 연산자를 참조하세요.
같음 및 비교 연산자
같음 및 비교 연산자는 두 식의 동등성을 확인하거나 관계형으로 비교합니다. 다음 표에서는 NoSQL용 API에서 두 JSON 형식 간의 같음 비교 결과를 보여 줍니다.
| 정의되지 않은 | 없음 | 불리언 (Boolean) | Number | String | Object | Array | |
|---|---|---|---|---|---|---|---|
| 정의되지 않은 | 정의 | 정의 | 정의 | 정의 | 정의 | 정의 | 정의 |
| 영 | 정의 | 확인 | 정의 | 정의 | 정의 | 정의 | 정의 |
| Boolean | 정의 | 정의 | 확인 | 정의 | 정의 | 정의 | 정의 |
| 숫자 | 정의 | 정의 | 정의 | 확인 | 정의 | 정의 | 정의 |
| String | 정의 | 정의 | 정의 | 정의 | 확인 | 정의 | 정의 |
| 객체 | 정의 | 정의 | 정의 | 정의 | 정의 | 확인 | 정의 |
| 배열 | 정의 | 정의 | 정의 | 정의 | 정의 | 정의 | 확인 |
=, <``, and <=, comparison across types or between two objects or arrays produces `undefined, `!=와 같은 >``, >비교 연산자입니다. 스칼라 식의 결과가 정의doesn't equate to되지 않은 경우 true'입니다undefined``, the item isn't included in the result, because .
예시
다음 쿼리는 'undefined'를 생성하는 숫자와 문자열 값을 비교합니다. 따라서 필터에는 결과가 포함되지 않습니다.
SELECT
*
FROM
products p
WHERE
0 = "true"
논리 연산자
논리 연산자는 부울(true/false) 피연산자를 사용하여 두 식을 비교합니다. 다음 섹션에서는 각 논리 연산자의 진리 테이블 및 우선 순위에 대해 설명합니다.
OR 연산자
연산자는 OR 조건 중 하나가 'true'이면 반환 true 됩니다.
true |
false |
undefined |
|
|---|---|---|---|
true |
true |
true |
true |
false |
true |
false |
undefined |
undefined |
true |
undefined |
undefined |
AND 연산자
AND 두 식이 모두 'true'이면 연산자가 반환 true 됩니다.
true |
false |
undefined |
|
|---|---|---|---|
true |
true |
false |
undefined |
false |
false |
false |
false |
undefined |
undefined |
false |
undefined |
NOT 연산자
NOT 연산자는 부울 식의 값을 반대로 바뀝니다.
NOT |
|
|---|---|
true |
false |
false |
true |
undefined |
undefined |
연산자 우선 순위
논리 연산자 OR``, AND'' 및 NOT 다음과 같은 우선 순위 수준이 있습니다.
| Operator | Priority |
|---|---|
NOT |
1 |
AND |
2 |
OR |
3 |
프로젝션 연산자
특수 연산 * 자는 전체 항목을 있는 그대로 투영합니다. 사용할 경우 유일한 프로젝스 필드여야 합니다. 같은 SELECT * FROM products p 쿼리는 유효하지만 SELECT VALUE * FROM products pSELECT *, p.id FROM products p 유효하지 않습니다.
3항 및 병합 연산자
Ternary 및 coalesce 연산자는 식을 평가하고 부울 피연산자 또는 필드 존재에 따라 결과를 반환합니다. 이러한 연산자는 C# 및 JavaScript와 같은 인기 있는 프로그래밍 언어의 유사한 연산자와 유사하게 작동합니다. 3항() 및 병합(???) 연산자를 사용하여 반구조적 또는 혼합 형식 데이터에 대해 복원력이 있는 조건식을 작성합니다.
3항 연산자
연산자는 ? 부울 식의 계산에 따라 값을 반환합니다.
문법
<bool_expr> ?
<expr_true> :
<expr_false>
Arguments
| Description | |
|---|---|
bool_expr |
부울 식입니다. |
expr_true |
계산할 식 bool_expr 입니다.true |
expr_false |
계산할 식 bool_expr 입니다.false |
예시
이 예제에서는 가격 책정과 관련된 여러 메타데이터 속성이 포함된 컨테이너의 항목을 사용합니다. 속성이 collapsible 모든 항목에 없는 경우:
[
{
"name": "Stangincy trekking poles",
"price": 24.50,
"onCloseout": false,
"onSale": true,
"collapsible": true
},
{
"name": "Vimero hiking poles",
"price": 24.50,
"onCloseout": false,
"onSale": false
},
{
"name": "Kramundsen trekking poles",
"price": 24.50,
"onCloseout": true,
"onSale": true,
"collapsible": false
}
]
이 쿼리는 onSale 0.85iftrue와 onSale = true``. The query returns the price multiplied by 동일한 식을 평가합니다, or the price unchanged if `false.
SELECT
p.name,
p.price AS subtotal,
p.onSale ? (p.price * 0.85) : p.price AS total
FROM
products p
이 쿼리는 다음을 반환합니다.
[
{
"name": "Stangincy trekking poles",
"subtotal": 24.5,
"total": 20.825
},
{
"name": "Vimero hiking poles",
"subtotal": 24.5,
"total": 24.5
},
{
"name": "Kramundsen trekking poles",
"subtotal": 24.5,
"total": 20.825
}
]
연산자에 대한 호출을 ? 중첩할 수도 있습니다. 이 예제에서는 두 번째 속성(onCloseout)을 기반으로 추가 계산을 추가합니다.
SELECT
p.name,
p.price AS subtotal,
p.onCloseout ? (p.price * 0.55) : p.onSale ? (p.price * 0.85) : p.price AS total
FROM
products p
이 쿼리는 다음을 반환합니다.
[
{
"name": "Stangincy trekking poles",
"subtotal": 24.5,
"total": 20.825
},
{
"name": "Vimero hiking poles",
"subtotal": 24.5,
"total": 24.5
},
{
"name": "Kramundsen trekking poles",
"subtotal": 24.5,
"total": 13.475000000000001
}
]
다른 쿼리 연산 ? 자처럼 참조된 속성이 없거나 비교되는 형식이 다른 경우 연산자는 항목을 제외합니다.
Coalesce 연산자
?? 반구조적 또는 혼합 형식 데이터에 대해 쿼리할 때 항목의 속성을 효율적으로 확인하려면 연산자를 사용합니다.
예시
이 쿼리는 속성이 없는 항목은 collapsible 축소할 수 없다고 가정합니다.
SELECT
p.name,
p.collapsible ?? false AS isCollapsible
FROM
products p