카우치베이스 모바일

카우치베이스 모바일 2.0의 쿼리 인터페이스 소개

카우치베이스 라이트 2.0 릴리즈는 다음과 같은 다양한 기능을 제공합니다. 새로운 기능 및 개선 사항. 이러한 개선 사항 중 하나인 새로운 복제 프로토콜에 대해서는 이전 블로그에서 논의했습니다. 복제 2.0에 대한 블로그 게시물. 이 블로그 게시물에서는 또 다른 주요 기능인 Couchbase Lite 쿼리 인터페이스에 대해 소개합니다. 새로운 쿼리 인터페이스는 다음을 기반으로 합니다. N1QL는 JSON용 SQL을 확장하는 Couchbase의 선언적 쿼리 언어입니다. SQL에 익숙하다면 새로운 API의 의미를 쉽게 이해할 수 있을 것입니다.

이 글에서는 쿼리 인터페이스에 대해 소개하고 기본적인 내용을 다룹니다. 고급 쿼리 기능에 대한 다른 관련 블로그 게시물에 대한 자세한 내용은 이 글의 마지막 섹션을 참조하세요.

Couchbase Mobile 2.0 사전 릴리스 빌드는 다음에서 다운로드할 수 있습니다. 다운로드 페이지로 이동합니다.

배경

1.x 버전의 Couchbase Mobile을 사용 중이시라면 다음과 같은 내용이 익숙하실 것입니다. 맵 보기 를 사용하여 인덱스와 쿼리를 만들 수 있습니다. 2.0에서는 더 이상 뷰와 맵 함수를 만들 필요가 없습니다! 대신, 간단한 인터페이스를 통해 인덱스를 생성하고 쿼리 빌더 인터페이스를 사용해 쿼리를 구성할 수 있습니다. 새로운 쿼리 인터페이스는 사용하기 더 간단하고 훨씬 더 강력합니다. 이 글에서 몇 가지 기능을 살펴보겠습니다.

샘플 프로젝트

여기서 설명하는 예제에서는 iOS용 Swift를 사용하지만, 몇 가지 사소한 차이점을 제외하고는 Android 및 Windows 플랫폼에서도 동일한 쿼리 인터페이스가 지원된다는 점에 유의하세요. 따라서 약간의 수정만 하면 다른 플랫폼에서 작업할 때 이 글의 예제를 재사용할 수 있습니다.

샘플 Swift 프로젝트에 관심이 있다면 아래 지침을 따르세요.

  • GitHub에서 iOS Swift 플레이그라운드 복제하기
  • 해당 항목의 설치 지침을 따르세요. README 파일을 사용하여 플레이그라운드를 빌드하고 실행합니다.

샘플 데이터 모델

당사는 다음 위치의 여행 샘플 데이터베이스를 사용합니다. 여기

샘플 데이터 세트에는 다음과 같이 여러 유형의 문서가 포함되어 있습니다. 유형 속성을 추가합니다. 다음과 같은 문서에 초점을 맞출 것입니다. 유형 "호텔" 그리고 "랜드마크". JSON 문서 모델은 아래와 같습니다. 단순화를 위해 아래 모델에서 일부 속성은 생략했습니다.

기본 사항

데이터베이스 열기/생성

아래의 모든 쿼리에는 데이터베이스 API를 사용하여 CouchbaseLite 데이터베이스를 열거나 생성합니다.

색인

읽기 쿼리 속도를 높이려면 쿼리할 속성에 인덱스를 만들면 됩니다. 대규모 데이터 세트에서 성능 향상은 상당할 것입니다. 물론 인덱스를 저장하기 위해 필요한 스토리지가 증가하고 쓰기 성능에도 영향을 미칠 수 있다는 점에 유의하세요. 따라서 너무 많은 인덱스를 만들지 않도록 주의하세요.

다음 예제에서는 ValueIndex 에서 유형 문서의 속성

다음 예제에서는 ValueIndex on 유형 그리고 이름 문서의 속성

데이터베이스에서 문서 가져오기

카우치베이스 라이트의 쿼리는 쿼리 빌더 API를 사용하여 구성됩니다.

아래 쿼리는 지정된 데이터베이스에서 모든 문서를 가져옵니다. 쿼리와 일치하는 모든 문서에 대해 문서와 관련된 모든 속성을 가져옵니다.

페이지 매김을 사용하여 데이터베이스에서 문서 가져오기

다음은 다음을 가져오는 간단한 쿼리의 구조입니다. limit 지정된 위치에서 시작하는 데이터베이스의 문서 수 오프셋. 쿼리와 일치하는 모든 문서에 대해 문서와 관련된 모든 속성을 가져옵니다.

SelectResult를 사용하여 값 반환

A SelectResult 는 쿼리 문의 단일 반환 값을 나타냅니다. Couchbase Lite의 문서는 키-값 쌍의 사전으로 지정된 문서 속성과 관련 메타데이터로 구성됩니다. 메타데이터는 문서에 연결된 문서 Id와 시퀀스 Id로 구성됩니다. 문서를 쿼리할 때 문서 메타데이터는 기본적으로 반환되지 않습니다. 메타데이터를 명시적으로 쿼리해야 합니다.

  • SelectResult.all()
    • 문서와 관련된 모든 프로퍼티를 반환합니다.
  • SelectResult(표현식)
    • 를 기준으로 문서의 속성을 반환합니다. 표현식. 다양한 유형의 표현식에 대해서는 잠시 후에 설명합니다.
  • SelectResult.expression(Expression.Meta.id)
    • 문서 ID 반환
  • SelectResult.expression(Expression.Meta.sequence)
    • 시퀀스 ID를 반환합니다(복제에 사용됨).

쉼표로 구분된 목록을 지정할 수 있습니다. SelectResult 표현식의 선택 쿼리의 문을 작성합니다.
예를 들어 다음 select 문 쿼리는 문서 Id와 유형 그리고 이름 문서의 속성

쿼리 표현식

쿼리 표현식은 쿼리 문을 구성하는 데 사용됩니다.

카우치베이스 라이트는 다음을 지원합니다. 표현식 유형.

  • 속성
  • 집계
  • 문자열
  • 데이터 정렬
  • 정규식
  • FTS
  • 널 검사 연산자
  • 산술 표현식
  • 메타데이터
  • 패턴 매칭
  • 비교
  • 컬렉션
  • 기능
  • 매개변수
  • 정량화
  • 비트 연산자

쿼리 응답 처리

쿼리 실행 결과는 배열의 모든 멤버가 쿼리를 만족하는 문서에 해당하는 Dictionary/Map인 배열입니다.

  • 다음을 사용하여 문서의 모든 속성을 쿼리하는 경우 SelectResult.all()를 사용하면 응답 배열의 각 멤버는 키-값 쌍으로, 데이터베이스 이름이 키이고 문서에 해당하는 사전이 키의 값입니다.예를 들어, 다음 쿼리를 고려하십시오.

  • 결과는 다음과 같이 표시됩니다("travel-sample"은 데이터베이스의 이름입니다).

    아래 코드 스니펫은 위의 결과를 처리하여 문서 객체의 세부 정보를 가져오는 방법의 예시(Swift)입니다.

     

  • 다음을 사용하여 문서의 ID를 쿼리하는 경우 SelectResult.expression(Expression.Meta.id)로 설정하면 응답 배열의 각 멤버는 키-값 쌍으로, 다음과 같이 "id" 를 키로, 문서 Id를 값으로 입력합니다.
    예를 들어 다음과 같은 쿼리를 생각해 보세요.

  • 결과는 다음과 같이 표시됩니다.

    아래 코드 스니펫은 위의 결과를 처리하여 문서 Id를 사용하여 문서 객체의 세부 정보를 가져오는 방법의 예시(Swift)입니다.
  • 예를 들어 다음을 사용하여 문서의 특정 속성/속성을 쿼리하는 경우, SelectResult.expression(Expression.property("type"))로 설정하면 응답 배열의 각 멤버는 키-값 쌍으로, 속성/속성의 이름을 키로, 해당 속성 값을 값으로 사용하는 쿼리를 예로 들어 보겠습니다.

  • 결과는 다음과 같이 표시됩니다.

    아래 코드 스니펫은 위의 결과를 처리하여 쿼리한 속성 값을 가져오는 방법의 예시(Swift)입니다.

    쉼표로 구분된 목록을 사용하여 문서 메타데이터와 속성을 동시에 쿼리할 수 있습니다. SelectResult 절을 사용하는 경우 응답 배열의 각 멤버는 앞서 설명한 대로 키-값 쌍입니다. 예를 들어, 쿼리를 고려하십시오.

    결과는 다음과 같이 표시됩니다.

    아래 코드 스니펫은 위의 결과를 처리하여 쿼리한 속성 값을 가져오는 방법의 예시(Swift)입니다.

     

Where 절 소개

SQL과 마찬가지로 어디 절을 사용하여 쿼리의 일부로 반환할 문서를 필터링할 수 있습니다. 쿼리에서 선택 문은 표현식. 원하는 수만큼 표현식 를 사용하여 정교한 필터링 기능을 구현할 수 있습니다.

특정 속성을 기준으로 문서 필터링

아래 예제에서는 속성 표현식 와 함께 입력합니다. 비교 표현식 유형을 사용하여 특정 문서 속성을 기준으로 문서를 필터링할 수 있습니다. 아래 예는 equalTo 비교 표현식입니다.

참고: 프로퍼티를 참조할 때 속성 표현식에서 키 경로(점선 표기)를 사용하여 중첩된 프로퍼티의 경로를 지정할 수 있습니다.

지원되는 비교 연산자 목록은 다음과 같습니다.
* 미만
* notLessThan
* lessThanOrEqualTo
* notLessThanOrEqualTo
* 더 큰보다
* notGreaterThan
* greaterThanOrEqualTo
* notGreaterThanOrEqualTo
* 같음
* notEqualTo

논리 표현식을 사용하여 문서 필터링

다음을 사용할 수 있습니다. 논리 표현식 여러 개의 비교 표현식. 아래 예제에서는 다음과 같은 문서를 가져옵니다. 유형 호텔 누구 국가 속성은 "미국" 또는 "프랑스" 그리고 누구의 공석 속성은 true. 즉, 미국 또는 프랑스에 공실이 있는 모든 호텔을 가져오는 것입니다.

패턴 매칭

그리고 같은 그리고 정규식 표현식을 문자열 매칭에 사용할 수 있습니다. 이러한 표현식은 대소문자를 구분하여 일치시킵니다. 따라서 문자열 일치에서 대소문자를 구분하지 않게 하려면 다음을 사용해야 합니다. Function.lower 또는 Function.upper 를 사용하여 일치하는 문자열을 소문자 또는 대문자로 변환합니다.

정확히 일치

아래 예에서는 다음과 같은 문서를 찾고 있습니다. 유형 "랜드마크" 이름 속성은 문자열과 정확히 일치합니다. "왕립 엔지니어 박물관". 이후 같은 대소문자를 구분하여 일치하는지 확인하기 위해 Function.lower 를 사용하여 일치하는 문자열을 소문자로 변환합니다. 따라서 다음 쿼리는 다음과 같이 반환됩니다. "랜드마크" 유형 문서가 포함된 이름 매칭 "왕립 엔지니어 박물관", "왕립 엔지니어 박물관", "왕립 엔지니어 박물관" 등입니다.

와일드카드 경기

다음을 사용할 수 있습니다. % 기호 안에 같은 표현식을 사용하여 0개 이상의 문자에 대해 와일드카드 일치를 수행할 수 있습니다. 와일드카드를 사용하면 검색 문자열에 약간의 모호성을 부여할 수 있습니다.

아래 예에서는 다음과 같은 문서를 찾고 있습니다. 유형 "랜드마크" 이름 속성은 "eng"로 시작하여 0자 이상, 문자 "e"로 시작하여 0자 이상 오는 모든 문자열과 일치합니다. 다시 한 번, 우리는 Function.lower 를 사용하여 검색 케이스에 민감하지 않게 만들 수 있습니다.

다음 쿼리가 반환됩니다. "랜드마크" 유형 문서가 포함된 이름 매칭 "엔지니어", "엔진", "잉글리시 에그" , "잉글랜드 이글" 등입니다. 일치하는 단어가 단어 경계에 걸쳐 있을 수 있다는 점에 유의하세요.

와일드카드 문자 매치

다음을 사용할 수 있습니다. "_" 기호 안에 같은 표현식을 사용하여 단일 캐릭터와 와일드카드 매치를 할 수 있습니다.

아래 예에서는 다음과 같은 문서를 찾고 있습니다. 유형 "랜드마크" 이름 속성은 "eng"로 시작하고 정확히 4개의 와일드카드 문자가 뒤따르고 문자 "r"로 끝나는 모든 문자열과 일치합니다.

이전 예제와 달리, 여기서는 Function.lower 를 입력하여 검색 문자열을 소문자로 변환합니다. 따라서 검색은 대소문자를 구분합니다.
다음 쿼리가 반환됩니다. "랜드마크" 유형 문서가 포함된 이름 매칭 "엔지니어", "Engineer1" 등입니다.

정규식 일치

그리고 정규식 표현식을 대소문자를 구분하는 일치 항목에 사용할 수 있습니다. 와일드카드와 유사 같은 표현식, 정규식 표현식 기반 패턴 일치를 사용하면 검색 문자열에 약간의 모호함이 있을 수 있습니다.

아래 예에서는 다음과 같은 문서를 찾고 있습니다. 유형 "랜드마크" 이름 속성은 "eng"로 시작하고 정확히 4개의 와일드카드 문자가 뒤따르고 문자 "r"로 끝나는 모든 문자열(단어 경계에 있는)과 일치합니다. 다시 한 번, 우리는 Function.lower 를 사용하여 검색 케이스에 민감하지 않게 만들 수 있습니다.

다음 쿼리가 반환됩니다. "랜드마크" 유형 문서가 포함된 이름 매칭 "엔진", "엔진" 등입니다. 참고 \b 는 단어 경계에서 일치 항목이 발생하도록 지정합니다.

무효 또는 누락된 속성이 있는 문서

SQL과 차별화되는 쿼리 언어의 특징 중 하나는 null 또는 누락된 속성이 있는 문서를 쿼리할 수 있다는 점입니다.

그리고 isNullOrMissing() 표현식은 속성 표현식 를 사용하여 지정된 프로퍼티에 null 또는 누락된 값이 있는지 테스트합니다. 프로퍼티의 isNullOrMissing() 는 그 반대입니다.

아래 예제에서는 다음과 같은 모든 문서를 찾고 있습니다. 이메일 속성이 없거나 누락되었습니다.

문서 주문

주어진 표현식 결과를 기준으로 쿼리 결과를 정렬할 수 있습니다.

아래 예는 다음과 같은 문서를 반환합니다. 유형 와 같은 "호텔" 값에 따라 오름차순으로 정렬됩니다. title 속성입니다.

문자열 조작

문자열 조작 기능은 모든 데이터 처리에 필수적인 요소입니다. 이전 예제에서는 Function.lower 를 사용하여 대소문자를 구분하지 않는 문자열 비교를 위해 문자열을 소문자로 변환할 수 있습니다.

카우치베이스 라이트는 다음과 같은 문자열 처리 기능을 지원합니다.

아래 예는 이메일 속성에 하위 문자열이 포함되어 있습니다. "natgeo.org". . 이름 속성 값은 응답에서 대문자로 변환됩니다.

 

데이터 정렬

데이터 정렬 함수는 유니코드 문자열, 로캘 인식 문자열 조작 및 발음 부호 같은 언어별 기능을 지원하여 문자열 비교 및 정렬 기능을 향상시킵니다. 데이터 정렬에 대한 자세한 내용은 이 문서에서 확인할 수 있습니다. 글쓰기 작성자: Jens Alfke.

아래 예제에서는 대소문자 및 악센트를 무시하는 데이터 정렬 규칙을 정의합니다. 이 콜레이터는 문자열 비교 함수의 이름 속성을 검색합니다. 결과에는 다음과 같은 문서가 포함됩니다. 이름 는 "호텔 노보텔 파리 라 데팡스" , "호텔 노보텔 파리 라 데팡스" 등과 같은 문자열과 같습니다.

데이터 정렬 지원에는 몇 가지 제한 사항이 있습니다. 이 게시물을 작성하는 시점에서는 다음과 같은 패턴 일치 쿼리에는 사용할 수 없습니다. 같은 그리고 정규식 .

매개변수화

쿼리 인터페이스의 더 강력한 기능 중 하나는 쿼리에 매개변수를 설정할 수 있는 기능입니다. 이를 통해 쿼리를 다시 만들거나 다시 시작할 필요 없이 언제든지 쿼리에 대한 매개변수 값을 유연하게 업데이트할 수 있습니다. 쿼리 매개변수를 변경하면 쿼리가 자동으로 다시 시작되고 새 매개변수가 적용됩니다.

위의 데이터 모델을 참조하여 숫자 공개 좋아요 가 특정 범위 내에 있는지 확인합니다. 아래 예에서는 "호텔"을 찾고 있습니다. 유형 문서에서 공개 좋아요 는 5에서 10 사이입니다.

위의 예제에서 다음을 사용했음을 알 수 있습니다. 배열 함수. 카우치베이스 라이트 2.0은 광범위한 배열 조작 지원을 제공합니다. 이에 대해서는 향후 이 컬렉션에 대한 블로그 게시물을 참조하세요.

다음 단계

이 블로그 게시물에서는 Couchbase Lite 2.0에서 지원되는 강력한 새 쿼리 인터페이스에 대해 살펴봤습니다. Couchbase Mobile 2.0 사전 릴리스 빌드는 다음에서 다운로드할 수 있습니다. 다운로드 페이지로 이동합니다.

다음은 관심을 가질 만한 다른 Couchbase 모바일 쿼리 관련 게시물입니다.
- 이 블로그 게시물 에서 전체 텍스트 검색 기능에 대해 설명합니다.
- 이 블로그 게시물 배열 컬렉션을 쿼리하는 방법에 대해 설명합니다.
- 이 블로그 게시물 조인 쿼리를 수행하는 방법에 대해 설명합니다.

질문이나 피드백이 있으면 아래에 댓글을 남기거나 트위터로 언제든지 문의해 주세요. @rajagp 또는 이메일을 보내주세요. priya.rajagopal@couchbase.com. . 카우치베이스 포럼 를 통해 질문할 수 있습니다.

 

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

작성자

게시자 프리야 라자고팔, 제품 관리 부문 선임 이사

프리야 라자고팔은 클라우드 및 엣지용 개발자 플랫폼을 담당하는 Couchbase의 제품 관리 수석 이사입니다. 그녀는 20년 이상 여러 기술 및 제품 리더십 직책을 맡으며 전문적으로 소프트웨어를 개발해 왔으며, 그중 10년 이상은 모바일 기술에 집중했습니다. TISPAN IPTV 표준 대표로서 IPTV 표준 사양에 핵심적인 기여를 했습니다. 네트워킹 및 플랫폼 보안 분야에서 22개의 특허를 보유하고 있습니다.

댓글 하나

  1. 안녕하세요,

    1.3.1의 일부 기능이 보기와 같이 사라진 것 같습니다. 여기에 1.3.1에서 보기를 얻는 코드를 첨부했습니다:
    var query = Provider.Db.GetView(viewName).CreateQuery();
    query.AllDocsMode = AllDocsMode.AllDocs;

    Couchbase.Lite 2.1.2에서 VIEW를 어떻게 찾을 수 있나요?

    1. 쿼리 빌더 인터페이스는 보다 직관적인 방법을 제공한다는 점을 제외하면 뷰와 동일한 기능을 지원합니다. SQL과 같은 형식이므로 사용하기가 더 간단합니다.
      하고자 하는 작업과 그 방법에 대한 구체적인 질문이 있는 경우 다음 개발자 포럼에 구체적인 예시와 함께 게시해 주세요. http://www.couchbase.com/forums/. 그 전에 다음의 문서를 검토하는 것이 좋습니다. https://docs.couchbase.com/couchbase-lite/2.1/csharp.html. csharp에서 이를 수행하는 방법에 대한 몇 가지 예가 있습니다.

  2. 타니가이벨란 우다야쿠마르 12월 20, 2018에서 5:08 오전

    문서도 어떻게 업데이트할 수 있는지 알려주시겠어요?
    모바일에서이 용량의 문서가 있는데 현재 구현에서 성능이 좋지 않습니다 (자바 스크립트 코어).

    문서 크기: 600KB
    라인: 27000
    총 문자 수:614386

    1. 타니가이벨란 우다야쿠마르 12월 20, 2018에서 5:11 오전

      제 케이스에 대한 방향을 알려주세요. 자세한 내용은 포럼에서 계속할 수 있습니다.

  3. 예제에서 언급할 때 작은 실수가 있습니다,
    이메일 속성이 0이거나 누락된 모든 문서를 찾고 있습니다.

    이 경우 isNullOrMissing() 대신 notNullOrMissing() 메서드를 잘못 사용했습니다.

    문서를 업데이트하세요.

  4. 안녕하세요,

    2.6.3으로 업그레이드 한 후 다음 코드가 작동하지 않습니다.

    Function.contains(Function.lower(Expression.property("email")), substring: Expression.string("Sri@xxx.com"))
    .or(Function.contains(Function.lower(Expression.property("subject")), substring: Expression.string("Sri@xxx.com"))))

    1. 죄송합니다, 제 실수입니다. 무시하세요.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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