이 블로그는 원래 로이 카츠의 개인 블로그 사이트에 게시되었습니다. 제발 여기를 클릭하세요 를 클릭하여 원본 게시물을 찾습니다.
에서 파트 1 작지만 멋진 애플리케이션을 만들었고, 심지어 다른 Couchbase Lite에 복제하기도 했습니다.
하지만 이제 어떻게 할까요? 실제로 사용하고 싶어요!
그렇다면 데이터베이스를 어떻게 사용하나요? 적어도 데이터를 '가져오는' 데는 몇 가지 옵션이 있습니다:
- 기본 키로 가져오기
- 인덱스로 가져오기(또는 x에서 '선택')
지금까지는 간단한 샘플 앱에서 '기본 키'만을 사용하여 데이터에 액세스하고 데이터를 검색할 수 있었습니다.
하지만 Couchbase Lite에서 데이터를 가져올 수 있는 유일한 방법은 아닙니다.
이 부분에서는 Couchbase Lite 인덱싱의 기본을 배웁니다. 일명 뷰라고도 합니다.
뷰에서 쿼리를 실행합니다.
그래서 우리는 해야 합니다:
- 보기 만들기
- 뷰에서 쿼리 실행
- 결과 보기
Couchbase Lite에서 '보기'를 사용하는 방법에 대한 사용 사례를 구축하겠습니다.
- 새 WPF 프로젝트를 시작합니다.
- Nuget Couchbase.Lite 패키지 추가하기
- 해당 XAML 복사
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<버튼></버튼> <버튼></버튼> <버튼></버튼> <버튼></버튼> |
이는 다음과 같이 해석됩니다.
![]() |
GUI는 위의 XAML 형식으로 생성됩니다. |
- 나중에 살펴볼 수 있는 기본 UI를 살펴본 후에는(여기서는 별다른 내용이 없습니다) 실제 코드로 넘어가 보겠습니다.
모든 작업을 시작하고 데이터베이스를 초기화한 후 뷰를 정의해 보겠습니다.
이 경우에는 설정 방법을 보여주기 위해 하나의 보기를 정의했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
비공개 void 조회수 생성() { var docsByCity = _database.GetView("docs_by_city"); docsByCity.SetMap((doc, emit) => { 만약 (doc.ContainsKey("City")) { emit(doc["City"], doc); } }, "1"); } |
여기서 볼 수 있듯이 _database에서 이름을 검색하면 그 위에 지도를 정의할 수 있는데, 지도는 기본적으로 투영과 필터링입니다.
위의 예에서는 "docs_by_city"라는 뷰를 만들고, 위임자를 할당하고, 일부 키("City")가 존재하는지 확인한 다음 인덱스로 내보냈습니다. 간단합니다.
방금 모든 문서에 City라는 속성이 포함된 인덱스를 만들었는데, 이 인덱스는 전체 문서를 방출하며 앱의 요구사항에 따라 원하는 것을 방출하도록 선택할 수 있습니다.
더 나은 성능과 더 작은 인덱스 크기를 위해 조정할 수 있습니다.
또한 원하는 문자열을 키로 입력하거나 여러 속성에서 인덱스를 구성하여 특별한 요구 사항을 타겟팅할 수 있습니다.
인덱스에 전체 문서를 저장하는 것은 기본적으로 문서의 사본을 인덱스 안에 만들기 때문에 결코 좋지 않습니다. 색인을 가능한 한 작게 유지하세요. 그러나 전체 문서를 결과로 포함하는 인덱스가 필요한 경우 성능상 결과.문서 속성에 액세스하는 대신 문서를 인덱스에 보관하는 것이 데이터베이스에 대한 일부 왕복 작업을 동일하게 수행하는 데 더 좋습니다.
여기서 숫자 "1"은 인덱스의 버전입니다. 개발 중에 맵 함수를 변경하면 인덱스를 다시 빌드하기 위해 (전체 데이터베이스를 삭제하지 않은 경우) 해당 번호도 증가시켜야 합니다.
두 가지 특별한 쿼리가 있습니다.
- 모든 문서 개수를 가져옵니다. (_database.DocumentCount 사용)
- 모든 문서를 가져옵니다. (_database.CreateAllDocumentsQuery() 사용)
뷰(*인덱스)를 정의한 후에는 코드 작성을 시작하여 사용할 수 있습니다.
- 사용법은 5단계로 매우 간단합니다.
- 뷰 보기
- 뷰에 쿼리 만들기
- 색인에 대한 기준 정의
- 실행하기
- 읽기
코드에서는 훨씬 더 간단해 보입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
비공개 void 도시별 클릭(객체 발신자, 라우팅된 이벤트 인수 e) { var docsByCity = _database.GetView("docs_by_city"); var 쿼리 = docsByCity.CreateQuery(); 쿼리.시작 키 = 도시; 쿼리.EndKey = 도시; var 쿼리 결과 = 쿼리.실행(); 메시지 상자.표시(문자열.형식("{0} 문서가 해당 쿼리에 대해 검색되었습니다.", 쿼리 결과.Count)); 만약 (쿼리 결과.Count == 0) 반환; var 문서 = 쿼리 결과.선택(결과 => JsonConvert.SerializeObject(결과.가치, 서식 지정.들여쓰기)).ToArray(); var commaSeperaterdDocs = "[" + 문자열.가입(",", 문서) + "]"; 문서 텍스트 = commaSeperaterdDocs; } |
쿼리를 실행하고 결과가 있는지 확인합니다.
그런 다음 결과를 (모든 값에 대해) '미화'하고 이를 JSON 배열로 반환합니다.
결과.문서를 사용하면 인덱스를 사용하지 않고 각 결과에 대해 데이터베이스를 쿼리하므로 여기서 결과.문서가 아니라 결과.값을 사용하고 있다는 점에 유의하세요.
따라서 성능을 위해 결과.key, 결과.value 또는 결과.DocumentId를 사용하세요.
이제 해당 부분을 추가하여 데이터를 생성하기만 하면 됩니다...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
비공개 void 삽입 일부 데이터 클릭(객체 발신자, 라우팅된 이벤트 인수 e) { var 결과 = 메시지 상자.표시("예(예)를 눌러 일부 데이터(문서 10개)를 삽입하세요!", "확인", 메시지 상자 버튼.예 아니요); 만약 (결과 == 메시지 상자 결과.예) { var 카운트 = _database.문서 수; 문자열[] 도시 = { "London", "뉴욕", "텔아비브" }; var rnd = new 랜덤(); 에 대한 (int i = 0; i < 10; i++) { var id = "문서" + (i + 카운트); var 도시 인덱스 = rnd.다음(0, 3); var 속성 = new 사전<문자열, 문자열>(); 속성.추가("name", "로이 카츠"); 속성.추가("City", 도시[도시 인덱스]); var doc = JsonConvert.SerializeObject(속성); 문서 삽입(id, doc); } 메시지 상자.표시("10개의 레코드 삽입됨"); } } |
이제 준비 완료!
간단한 보기는 이렇게 합니다!
물론 카우치베이스 라이트 뷰에는 앞으로 더 많은 기능이 추가될 예정이지만, 이는 시작에 불과합니다.
물론 적절한 프로퍼티를 만들어야 하므로 전체 프로젝트에 대해서는 내 GitHub 페이지로 이동합니다.
여기서 _database는 무엇인가요? 위의 내용을 카우치베이스 서버를 사용하는 nodeJs 앱에서 구현하려고 하는데 _database 대신 버킷 이름을 넣었지만 아무것도 제대로 얻지 못했습니다.