Couchbase N1QL Operators
연산자(Operators)
개요
연산자 종류
- 산술 연산자
- 컬렉션 연산자
- 비교 연산자
- 조건 연산자
- 생성 연산자
- 논리 연산자
- 중첩 연산자와 표현식
- 문자열 연산자
연산 우선 순위
CASE
.
[]
-
(unary, 단항)*
,/
,%
+
,-
IS
IN
BETWEEN
LIKE
<
,<=
,>
,=>
=
,==
,<>
,!=
NOT
AND
OR
산술 연산자
컬렉션 연산자
ANY
ARRAY
- 컬렉션, 오브젝트 또는 여러 오브젝트의 속성 또는 요소들을 map과 필터할 때 사용
WHEN
절이 제공될 경우WHEN
절을 만족하는, 연산되는 표현식(operand expression)의 배열ARRAY
`FOR` `IN``WHEN` -
의 각 요소인 에서 -
을 만족하는 - 배열을 반환
-
문법
ARRAY var1 FOR var1 ( IN | WITHIN ) expr1
[ , var2 ( IN | WITHIN ) expr2 ]*
[ ( WHEN cond1 [ AND cond2 ] ) ] END
SELECT
ARRAY
FOR
var1 IN sb.arr1,
var2 WITHIN sb.arr2,
var3 IN sb.arr3
WHEN
var1.some.field = '<condition>' AND
var2.some.arr[0] > '<condition>' AND
var3.what < '<condition>'
END
FROM some_bucket sb
인자
- var1, var2, …, varx →
ARRAY
반복문에서 변수명을 나타내는 문자열 또는 표현식 - expr1, expr2, …, exprX → 반복할 배열을 나타내는 문자열 또는 표현식
- cond1, cond2, …, condX → 테스트할 제한 또는 매칭 절을 나타내는 표현식
반환
ARRAY
표현식을 만족함 → 배열 또는 여러 배열ARRAY
표현식을 만족하지 않음 → 배열
에제1
Query
SELECT
ARRAY v FOR v IN usr.shipped_order_history WHEN v.order_datetime > 'Thu Aug 4 22:00:09 2011' END AS arrfor
FROM users_with_orders usr
USE KEYS "Elinor_33313792"
Result
{
"results": [
{
"arrfor": [
{
"order_datetime": "Wed May 30 22:00:09 2012",
"order_id": "T103929516925"
}
]
}
]
}
예제2
Query
SELECT ARRAY v FOR v IN schedule WHEN v.utc > "19:00" AND v.day = 5 END AS fri_evening_flights
FROM `travel-sample`
WHERE
type="route" AND
airline="KL" AND
sourceairport="ABQ" AND
destinationairport="ATL" AND
ANY v IN schedule SATISFIES v.utc > "19:00" END;
FROM
type="route
: 컬렉션의 타입이 routeairline="KL"
: KL 항공사sourceairport="ABQ"
: 출발지가 Albuquerquedestinationairport="ATL"
: 목적지가 AtlantaANY v IN schedule SATISFIES v.utc > "19:00" END
: 저녁 7시 이후인 모든 스케쥴
SELECT
ARRAY v FOR v IN schedule WHEN v.utc > "19:00" AND v.day = 5 END
- 5일
- 저녁 7시 이후인
- 스케쥴 배열
Result
[
{
"fri_evening_flights": [
{
"day": 5,
"flight": "KL169",
"utc": "23:41:00"
}
]
}
]
예제3
Query
SELECT *
FROM users_with_orders usr
USE KEYS "Elinor_33313792"
WHERE ANY v IN usr.shipped_order_history SATISFIES v.order_datetime > 'Thu Aug 4 22:00:09 2011' END
FROM
- users_with_orders 버킷
USE KEYS
- 키는 Elinor_33313792
WHERE
- usr.shipped_order_history 배열에서 order_datetime 날짜가 Thu Aug 4 22:00:09 2011 이후를 만족
SELECT
- 위 조건을 만족하는 완전한 usr 문서
Result
{
"results": [
{
"usr": {
"doc_type": "user_profile",
"personal_details": {
"age": 60,
"display_name": "Elinor Ritchie",
"email": "Elinor.Ritchie@snailmail.com",
"first_name": "Elinor",
"last_name": "Ritchie",
"state": "Arizona"
},
"profile_details": {
"last_login_time": "Wed Jan 16 22:00:09 2013",
"loyalty": {
"friends_referred": [],
"loyalty_score": 7.44363933614319,
"membership_type": "Gold",
"redeemed_points": 903,
"reward_points": 2016
},
"password": "Elinor73",
"prefs": {
"promotion_email": false,
"ui_language": "English",
"ui_theme": "Beach"
},
"user_creation_time": "Tue May 31 22:00:09 2011",
"user_id": "Elinor_33313792"
},
"search_history": [
{
"category": "Films",
"sub-category": [
"Foreign Films",
"Drama",
"Sci-Fi, Fantasy & Horror"
]
},
{
"category": "Books",
"sub-category": ["Humor"]
}
],
"shipped_order_history": [
{
"order_datetime": "Wed May 30 22:00:09 2012",
"order_id": "T103929516925"
},
{
"order_datetime": "Thu Aug 4 22:00:09 2011",
"order_id": "T573145204032"
}
]
}
}
]
}
예제4
Query
- usr.shipped_order_history 배열에서 order_datetime 날짜가 Thu Aug 4 22:00:09 2011 이후를 만족하는 유저 프로필이 있는 경우
- 그 유저 프로필의 shipped_order_history
SELECT
ARRAY v FOR v IN usr.shipped_order_history END AS arrfor
FROM users_with_orders usr
USE KEYS "Elinor_33313792"
WHERE
ANY v IN usr.shipped_order_history SATISFIES v.order_datetime > 'Thu Aug 4 22:00:09 2011' END
FROM
- users_with_orders 버킷
USE KEYS
- 키는 Elinor_33313792
WHERE
- usr.shipped_order_history 배열에서 order_datetime 날짜가 Thu Aug 4 22:00:09 2011 이후를 만족
SELECT
ARRAY v FOR v IN usr.shipped_order_history END
- 위 조건을 만족하는 usr 문서에서
- shipped_order_history 배열
Result
{
"results": [
{
"arrfor": [
{
"order_datetime": "Wed May 30 22:00:09 2012",
"order_id": "T103929516925"
},
{
"order_datetime": "Thu Aug 4 22:00:09 2011",
"order_id": "T573145204032"
}
]
}
]
}
예제5
Query
SELECT
ARRAY v FOR v IN usr.shipped_order_history WHEN v.order_datetime > 'Thu Aug 4 22:00:09 2011' END AS arrfor
FROM users_with_orders usr
USE KEYS "Elinor_33313792"
WHERE ANY v IN usr.shipped_order_history SATISFIES v.order_datetime > 'Thu Aug 4 22:00:09 2011' END
FROM
- users_with_orders 버킷
USE KEYS
- 키는 Elinor_33313792
WHERE
- usr.shipped_order_history 배열에서 order_datetime 날짜가 Thu Aug 4 22:00:09 2011 이후를 만족
SELECT
ARRAY v FOR v IN usr.shipped_order_history WHEN v.order_datetime > 'Thu Aug 4 22:00:09 2011' END
- 위 조건을 만족하는 usr 문서에서
- shipped_order_history 배열에서
- order_datetime 날짜가 Thu Aug 4 22:00:09 2011 이후인 배열
Result
{
"results": [
{
"arrfor": [
{
"order_datetime": "Wed May 30 22:00:09 2012",
"order_id": "T103929516925"
}
]
}
]
}