분류

.NET 클라이언트 라이브러리를 사용한 강력하게 입력된 뷰

그리고 최신 정보 는 몇 가지 다른 뷰 쿼리 옵션을 지원합니다. 이 글에서는 이러한 옵션에 대해 자세히 설명하겠습니다. 집에서 따라 해보려면 맥주 샘플 샘플 버킷과 함께 최신 Couchbase Server가 설치되어 있는지 확인하세요. 

"beer" 디자인 문서의 맥주 샘플 버킷에 "by_name"이라는 이름의 보기를 추가했습니다. 이 보기는 단순히 "beer" 문서의 "name" 속성에 대한 보조 인덱스를 만듭니다.

함수 (doc, 메타) {
  만약 (doc.이름 && doc.유형 && doc.유형 == "맥주") {
    emit(doc.이름, null);
  }    
}

의 비일반 버전으로 이 뷰를 쿼리합니다. GetView 를 사용하면 열거할 수 없는 IViewRow 뷰의 행에 대한 정보를 포함하는 인스턴스입니다.

클라이언트 코드를 다음과 같이 설정합니다:

var config = new 카우치베이스클라이언트 구성();
구성.Urls.추가(new Uri("https://localhost:8091/pools"));
구성.버킷 = "맥주 샘플";            

var client = new 카우치베이스클라이언트(구성);

그런 다음 뷰를 쿼리합니다:

var view = 클라이언트.GetView("맥주", "by_name");
foreach (var row in 보기)
{
    콘솔.WriteLine("행 ID: " +.ItemId);
    콘솔.WriteLine("행 키: " +.ViewKey[0]);
    콘솔.WriteLine("행 값: " +.정보["value"]);
}

IViewRow 인터페이스는 행의 "id" 및 "key" 속성에 대한 속성을 정의하고 행의 각 속성에 액세스할 수 있는 딕셔너리를 추가로 제공합니다. 

각 행과 연관된 원본 문서를 검색하려면 row.ItemId를 가져와 클라이언트의 Get 메서드를 사용합니다.

foreach (var row in 보기)
{
    var item = 클라이언트.Get(.ItemId);
    콘솔.WriteLine(항목);
}

또는 다중 가져오기를 수행하여 한 번의 호출로 모든 문서를 검색할 수도 있습니다. 이 버전에서는 LINQ 쿼리 시 뷰가 쿼리됩니다. 선택 메서드가 호출되며, 뷰의 열거가 뷰를 쿼리할 때는 위와 반대로 호출됩니다. 두 경우 모두 뷰의 열거형인 IView 인스턴스를 생성하여 서버의 뷰에 대한 요청을 트리거합니다.

var docs = 클라이언트.Get(보기.선택(r => r.ItemId));
foreach (var doc in 문서)
{
    콘솔.WriteLine(doc);
}

이제 맥주 클래스의 인스턴스를 가져오고 싶을 때 응용 프로그램에서 맥주s 뷰를 반복할 때 

public 클래스 맥주
{
    [제이슨 프로퍼티("name")]
    public 문자열 이름 { get; set; }

    [제이슨 프로퍼티("abc")]        
    public float ABV { get; set; }

    [제이슨 프로퍼티("brewery_id")]
    public 문자열 BreweryId { get; set; }

    [제이슨 프로퍼티("type")]
    public 문자열 유형 { get; set; }

    [제이슨 프로퍼티("설명")]
    public 문자열 설명 { get; set; }

}

Beer 클래스는 JSON을 직렬화 및 역직렬화하기 위해 Newtonsoft.Json을 사용합니다. 클라이언트 라이브러리에도 이 어셈블리에 대한 종속성이 있습니다.

새로운 맥주 클래스를 사용하면 뷰를 쿼리하고 클라이언트에게 다음과 같이 말할 수 있습니다. 맥주 인스턴스는 뷰의 각 행 열거형에서 반환되는 항목이어야 합니다.

var view = 클라이언트.GetView<맥주>("맥주", "by_name", true);

foreach(var 맥주 in 보기)
{
    콘솔.WriteLine(맥주.이름);
}

위의 스니펫에서 주목해야 할 두 가지 중요한 변경 사항이 있습니다. 첫째, 언제 GetView 를 호출합니다, 맥주 가 일반 유형으로 지정됩니다. 둘째, 세 번째 인수는 GetView 클라이언트에 다음을 지시합니다. Get 의 인스턴스로 역직렬화합니다. T 또는 이 경우 맥주.

행에서 반환되는 값이 인덱싱된 문서의 투영인 경우에도 강력하게 입력된 보기가 가능합니다. 

함수 (doc, 메타) {
  만약 (doc.이름 && doc.유형 && doc.유형 == "맥주") {
    emit(doc.이름, { "beer_name" : doc.이름, "beer_style" : doc.스타일 });
  }    
}

이제 뷰에 맥주 이름과 스타일이 포함되므로(이것은 투영을 인위적으로 사용한 것입니다) 뷰 쿼리 결과를 강력하게 입력할 수 있습니다. 맥주 프로젝션 클래스. 

public 클래스 맥주 프로젝션
{
    [제이슨 프로퍼티("beer_name")]
    public 문자열 이름 { get; set; }

    [제이슨 프로퍼티("beer_style")]
    public 문자열 스타일 { get; set; }
}

에서 부울 인수를 제거합니다. GetView 호출은 기본값을 거짓으로 남겨두고 클라이언트는 각 뷰 행의 값 속성을 다음과 같은 인스턴스로 역직렬화하려고 시도합니다. T또는 이 경우 맥주 프로젝션.

var view = 클라이언트.GetView<맥주 프로젝션>("맥주", "by_name");

foreach(var 맥주 in 보기)
{
    콘솔.WriteLine(맥주.이름);
}

마지막으로 일반적인 멀티겟을 수행하고 자체 역직렬화 기술을 사용하려는 경우 다음과 같이 할 수 있습니다:

var view = 클라이언트.GetView("맥주", "by_name");
다양한 맥주 = 클라이언트.Get(보기.선택(v => v.ItemId)).선택(d =>
        JsonConvert.역직렬화 개체<맥주>(d.가치 as 문자열)
    );

foreach(var 맥주 in 맥주)
{
    콘솔.WriteLine(맥주.이름);
}

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

작성자

게시자 존 자블로키

존 자블로키는 NET. SDK 개발자입니다. John은 Beantown ALT.NET의 주최자이자 Fairfield University의 전 겸임교수이기도 합니다. Amazon에서 Couchbase Server를 설치하고 구성하는 방법을 설명하는 "Couchbase Essentials"라는 책을 확인할 수도 있습니다.

댓글 하나

  1. 안녕하세요 Jhon,
    이 문서는 매우 훌륭합니다. 메서드에 매개 변수를 전달하여 View에서 레코드를 검색하고 싶습니다. 나는 이것에 대해 RnD를하고 있습니다. 이것도 도와 주시겠습니까?

    미리 양해해 주셔서 감사합니다.

    Suraj

    1. 안녕하세요 수라즈,

      각 GetView 메서드에는 유창한 방식으로 매개변수를 연결할 수 있는 기능이 있습니다. 다시 말해

      var view = clien.GetView(\"designdoc\", \"view\").Key(\"foo\").Limit(10);

      자세한 정보는 다음 링크에서 확인하세요. https://www.couchbase.com/docs/....

      1. 이 GetView 메서드에 대해 읽어보고 Suraj가 하는 것과 동일하게 작동하도록 해보았지만 저에게는 작동하지 않습니다.

        1. //-- 샘플 문서
          {
          \"기호\": \"HCP\",
          \"name\": \"HCP, Inc.\",
          \"sector\": \"소비자 서비스\",
          .....
          }

          //- 보기
          함수 (문서, 메타) {
          if (doc.symbol) {
          emit([doc.symbol.toLowerCase()], null);
          }
          }

          //-- c#
          var view = GetView(\"by_symbol\").Key(symbol.ToLower());

          //-- 테스트 보기
          _view/by_symbol?stale=false&key=%22hcp%22&connection_timeout=60000&limit=10&skip=0

          //-- 결과
          "hcp\" 기호를 찾을 수 없음..... 무슨 일인지 전혀 모르겠습니다.

  2. 오류가 발생했습니다:
    값 1을 \'Couchbase.IViewRow\' 유형으로 변환하는 동안 오류가 발생했습니다. 경로 \'\', 1줄, 위치 1.

    오류
    값 1을 \'Couchbase.IViewRow\' 유형으로 변환합니다. 경로 \'\', 1줄,
    위치 1. - 자세히 보기:
    https://www.couchbase.com/commu...
    오류
    값 1을 \'Couchbase.IViewRow\' 유형으로 변환합니다. 경로 \'\', 1줄,
    위치 1. - 자세히 보기:
    https://www.couchbase.com/commu...
    오류
    값 1을 \'Couchbase.IViewRow\' 유형으로 변환합니다. 경로 \'\', 1줄,
    위치 1. - 자세히 보기:
    https://www.couchbase.com/commu...
    오류
    값 1을 \'Couchbase.IViewRow\' 유형으로 변환합니다. 경로 \'\', 1줄,
    위치 1. - 자세히 보기:
    https://www.couchbase.com/commu...

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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