그리고 최신 정보 는 몇 가지 다른 뷰 쿼리 옵션을 지원합니다. 이 글에서는 이러한 옵션에 대해 자세히 설명하겠습니다. 집에서 따라 해보려면 맥주 샘플 샘플 버킷과 함께 최신 Couchbase Server가 설치되어 있는지 확인하세요.
"beer" 디자인 문서의 맥주 샘플 버킷에 "by_name"이라는 이름의 보기를 추가했습니다. 이 보기는 단순히 "beer" 문서의 "name" 속성에 대한 보조 인덱스를 만듭니다.
만약 (doc.이름 && doc.유형 && doc.유형 == "맥주") {
emit(doc.이름, null);
}
}
의 비일반 버전으로 이 뷰를 쿼리합니다. GetView 를 사용하면 열거할 수 없는 IViewRow 뷰의 행에 대한 정보를 포함하는 인스턴스입니다.
클라이언트 코드를 다음과 같이 설정합니다:
그런 다음 뷰를 쿼리합니다:
foreach (var row in 보기)
{
콘솔.WriteLine("행 ID: " + 행.ItemId);
콘솔.WriteLine("행 키: " + 행.ViewKey[0]);
콘솔.WriteLine("행 값: " + 행.정보["value"]);
}
IViewRow 인터페이스는 행의 "id" 및 "key" 속성에 대한 속성을 정의하고 행의 각 속성에 액세스할 수 있는 딕셔너리를 추가로 제공합니다.
각 행과 연관된 원본 문서를 검색하려면 row.ItemId를 가져와 클라이언트의 Get 메서드를 사용합니다.
{
var item = 클라이언트.Get(행.ItemId);
콘솔.WriteLine(항목);
}
또는 다중 가져오기를 수행하여 한 번의 호출로 모든 문서를 검색할 수도 있습니다. 이 버전에서는 LINQ 쿼리 시 뷰가 쿼리됩니다. 선택 메서드가 호출되며, 뷰의 열거가 뷰를 쿼리할 때는 위와 반대로 호출됩니다. 두 경우 모두 뷰의 열거형인 IView 인스턴스를 생성하여 서버의 뷰에 대한 요청을 트리거합니다.
foreach (var doc in 문서)
{
콘솔.WriteLine(doc);
}
이제 맥주 클래스의 인스턴스를 가져오고 싶을 때 응용 프로그램에서 맥주s 뷰를 반복할 때
{
[제이슨 프로퍼티("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을 사용합니다. 클라이언트 라이브러리에도 이 어셈블리에 대한 종속성이 있습니다.
새로운 맥주 클래스를 사용하면 뷰를 쿼리하고 클라이언트에게 다음과 같이 말할 수 있습니다. 맥주 인스턴스는 뷰의 각 행 열거형에서 반환되는 항목이어야 합니다.
foreach(var 맥주 in 보기)
{
콘솔.WriteLine(맥주.이름);
}
위의 스니펫에서 주목해야 할 두 가지 중요한 변경 사항이 있습니다. 첫째, 언제 GetView 를 호출합니다, 맥주 가 일반 유형으로 지정됩니다. 둘째, 세 번째 인수는 GetView 클라이언트에 다음을 지시합니다. Get 의 인스턴스로 역직렬화합니다. T 또는 이 경우 맥주.
행에서 반환되는 값이 인덱싱된 문서의 투영인 경우에도 강력하게 입력된 보기가 가능합니다.
만약 (doc.이름 && doc.유형 && doc.유형 == "맥주") {
emit(doc.이름, { "beer_name" : doc.이름, "beer_style" : doc.스타일 });
}
}
이제 뷰에 맥주 이름과 스타일이 포함되므로(이것은 투영을 인위적으로 사용한 것입니다) 뷰 쿼리 결과를 강력하게 입력할 수 있습니다. 맥주 프로젝션 클래스.
{
[제이슨 프로퍼티("beer_name")]
public 문자열 이름 { get; set; }
[제이슨 프로퍼티("beer_style")]
public 문자열 스타일 { get; set; }
}
에서 부울 인수를 제거합니다. GetView 호출은 기본값을 거짓으로 남겨두고 클라이언트는 각 뷰 행의 값 속성을 다음과 같은 인스턴스로 역직렬화하려고 시도합니다. T또는 이 경우 맥주 프로젝션.
foreach(var 맥주 in 보기)
{
콘솔.WriteLine(맥주.이름);
}
마지막으로 일반적인 멀티겟을 수행하고 자체 역직렬화 기술을 사용하려는 경우 다음과 같이 할 수 있습니다:
다양한 맥주 = 클라이언트.Get(보기.선택(v => v.ItemId)).선택(d =>
JsonConvert.역직렬화 개체<맥주>(d.가치 as 문자열)
);
foreach(var 맥주 in 맥주)
{
콘솔.WriteLine(맥주.이름);
}
안녕하세요 Jhon,
이 문서는 매우 훌륭합니다. 메서드에 매개 변수를 전달하여 View에서 레코드를 검색하고 싶습니다. 나는 이것에 대해 RnD를하고 있습니다. 이것도 도와 주시겠습니까?
미리 양해해 주셔서 감사합니다.
Suraj
안녕하세요 수라즈,
각 GetView 메서드에는 유창한 방식으로 매개변수를 연결할 수 있는 기능이 있습니다. 다시 말해
var view = clien.GetView(\"designdoc\", \"view\").Key(\"foo\").Limit(10);
자세한 정보는 다음 링크에서 확인하세요. https://www.couchbase.com/docs/....
이 GetView 메서드에 대해 읽어보고 Suraj가 하는 것과 동일하게 작동하도록 해보았지만 저에게는 작동하지 않습니다.
//-- 샘플 문서
{
\"기호\": \"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\" 기호를 찾을 수 없음..... 무슨 일인지 전혀 모르겠습니다.
오류가 발생했습니다:
값 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...
https://www.couchbase.com/commu...