SQL++/N1QL 쿼리

N1QL에서 JSON 배열로 작업하기

N1QL 쿼리 언어에는 JSON 배열 작업을 위한 다양한 기능이 있습니다. 이 문서에서는 배열 상수, 배열에서 검색하는 기능, 배열을 변환하는 방법, 몇 가지 유용한 N1QL 배열 함수에 대해 다룹니다. 대화형 형식이므로 Couchbase 인스턴스를 실행하고 예제를 직접 사용해 보세요.

먼저 Couchbase 인스턴스의 관리자 콘솔로 이동하여 "test"라는 이름의 버킷을 만듭니다.

또는 다음과 같이 명령줄에서 버킷을 만들 수도 있습니다:

curl -X POST -u 관리자:비밀번호 -d 이름=테스트 -d 램쿼터MB=100 -d 인증 유형=sasl -d saslPassword=donotuse -d 프록시 포트=11224 -d 버킷 유형=couchbase http://localhost:8091/pools/default/buckets

다음과 같이 CBQ 셸을 사용하여 인스턴스에 연결합니다:

cbq -e http://localhost:8091 -u 관리자 -p 비밀번호

그런 다음 CBQ에서 새 버킷에 기본 인덱스를 만듭니다:

cbq> 테스트에서 기본 인덱스를 만듭니다;

이제 시작할 준비가 되었습니다.

카우치베이스 배열 상수

우선, N1QL을 사용하면 다음과 같이 배열 값을 배열 상수로 직접 생성할 수 있습니다:

cbq> select [1,2,3] as num_array, ["a", "b", "c"] as string_array, ["1", 2, [3, "4"], {"a":"b"}] as mixed_array;

상수에는 데이터베이스에서 가져온 값도 포함될 수 있습니다:
cbq> insert into test (key, value) values ("ex1", {"v1" : 7, "v2" : "bird", "v3" : 99});

cbq> select [1, v1, 3] as num_array, ["a", v2, "c"] as string_array from test where v3 = 99;

제로 기반 인덱스를 통한 요소 선택도 지원됩니다:

cbq> select ["apple", "banana", "cherry", "date", "elderberry"][1] as val;

카우치베이스 쿼리 배열 및 배열 내 검색

IN 절은 멤버십을 테스트하는 데 사용됩니다.

cbq> select (9 IN [1, 2, 3, 4]) as not_found, (9 IN [7, 8, 9]) as is_found;

ANY 절은 배열의 요소 중 하나 이상이 특정 조건과 일치하는지 확인하는 데 사용됩니다:

cbq> select (ANY v IN [1, 2, 3, 4, 5] SATISFIES v > 4 END)를 is_found로, (ANY v IN [1, 2, 3, 4, 5] SATISFIES v = 7 END)를 not_found로 입력합니다;

EVERY 절은 배열의 모든 요소가 특정 조건과 일치하는지 확인하는 데 사용됩니다:

cbq> select (EVERY v IN [1, 2, 3, 4, 5] SATISFIES v > 0 END) as is_found, (EVERY v in [-1, 0, 1, 2, 3] SATISFIES v > 0 END )를 not_found로 입력합니다;

ANY AND EVERY는 EVERY와 매우 유사하지만 빈 배열에 대해서는 EVERY가 참이지만 ANY AND EVERY는 거짓입니다:

cbq> select (ANY AND EVERY v IN [] SATISFIES v > 0 END)를 any_very_res로, (EVERY v IN [] SATISFIES v > 0 END)를 every_res로 합니다;

슬라이싱

[:] 연산자는 슬라이싱, 즉 배열 조각을 가져오는 데 사용됩니다.

cbq> [1, 2, 3, 4, 5][1: 3]을 res로 선택합니다;

슬라이스 표현식의 첫 번째 값은 시작할 인덱스(0 기준)이고, 두 번째 값은 제외해야 할 첫 번째 인덱스입니다. 이 규칙은 다른 프로그래밍 언어에서도 익숙할 것입니다.

슬라이스의 시작과 끝을 모두 지정해야 합니다. 음수 값은 배열의 끝부터 열거됩니다:

cbq> [1, 2, 3, 4, 5][1: -1]을 res로 선택합니다;

카우치베이스 배열 변환하기

ARRAY 표현식을 사용하면 배열을 다른 배열로 변환할 수 있습니다.

cbq> ARRAY v*2 FOR v IN [1, 2, 3, 4, 5] END를 res로 선택합니다;

ARRAY 표현식은 선택도 지원합니다:

cbq> ARRAY v*2 FOR v IN [1, 2, 3, 4, 5] WHEN v > 2 END를 res로 선택합니다;

대상 표현식에는 각 값뿐만 아니라 인덱스도 포함될 수 있습니다:

cbq> SELECT ARRAY {v:pos} FOR pos:v IN [ "one", "two", "three" ] END;

N1QL의 배열 연산에 대해 자세히 알아보려면 다음 문서를 확인하세요. 여기.

카우치베이스 배열 함수

N1QL에는 JSON 배열에서 작동하기 위한 광범위한 함수 집합이 있습니다.

ARRAY_LENGTH는 배열의 길이를 반환합니다.

cbq> select ARRAY_LENGTH([1, 2, 3, 4, 5]) as res;

ARRAY_APPEND는 배열의 끝에 요소를 추가합니다.

cbq> select ARRAY_APPEND([1, 2, 3, 4, 5], 9, 10) as res;

ARRAY_CONCAT도 비슷하지만 두 배열을 함께 결합합니다.

cbq> select ARRAY_CONCAT([1, 2, 3, 4, 5], [7, 8]) as res;

ARRAY_SORT는 배열의 요소를 정렬합니다.

cbq> select ARRAY_SORT([2, 1, 3, 5, 4]) as res;

마지막으로 ARRAY_DISTINCT는 배열에서 중복을 제거합니다.

cbq> select ARRAY_DISTINCT([1, 2, 3, 3, 3, 4, 5, 4, 5]) as res;

N1QL에는 여기서 다루기에는 너무 많은 유용한 배열 함수가 있습니다. 전체 목록은 다음과 같습니다. 여기.

성능

"하지만 JSON 배열의 성능은 어떨까요?"라고 질문하실 수 있습니다. 걱정하지 마세요. 다른 글에서 다루겠습니다, 여기.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 요한 라슨

요한 라슨은 카우치베이스의 선임 소프트웨어 엔지니어입니다. Johan은 분산형 NoSQL 시스템에서 JSON 데이터를 위한 SQL 기반 쿼리 언어를 구축하는 업무를 담당하고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.