보기 사용
보기를 사용하여 특정 기준과 일치하는 데이터베이스 내의 컨텐츠를 검색할 수 있습니다. 기준은 보기 정의 내에서 지정됩니다.
보기를 사용할 때 인수로 기준을 제공할 수도 있습니다.
뷰 쿼리
보기를 조회하려면 다음과 같은 형식의 GET 요청을 제출하십시오.
- 메소드
GET $SERVICE_URL/$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_view/$VIEW_NAME명령을 사용하여 파티션 조회를 실행합니다. 또는GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME명령을 사용하여 글로벌 조회를 실행합니다.- 요청
- 없음
- 응답
- 보기에서 리턴되는 문서의 JSON입니다.
- 허용되는 역할
_reader
요청은 다음 항목 중 하나를 실행합니다.
- 지정된
$DDOC설계 문서에 명시된$VIEW_NAME$DATABASE데이터베이스 내에서, 이는 지정된 범위 내의 결과로 제한되며$PARTITION_KEY데이터 파티션. - 지정된
$DDOC설계 문서에 명시된$VIEW_NAME$DATABASE데이터베이스 내에서.
이 문서의 예제는 설명을 위해 파티션 및 글로벌 조회로 구분되어 있습니다. 별도로 언급하지 않는 한 파티션 이름을 임베드하거나 제거하는 경로를 수정하는 경우 모든 보기 조회 유형에 대해 작동합니다.
조회 및 JSON 본문 인수
글로벌 조회에서는 모든 조회 및 JSON 본문 인수를 사용할 수 있습니다. 파티션 조회에서는 표에 표시된 서브세트만 사용할 수 있습니다.
| 인수 | 설명 | 선택사항 | 유형 | 기본 | 지원되는 값 | 파티션 조회 |
|---|---|---|---|---|---|---|
conflicts |
반환된 문서의 _conflicts 속성에 충돌하는 수정본 목록을 포함할지 여부를 지정합니다. include_docs 이 true 으로 설정되지 않은 경우 무시됩니다. |
예 | 부울 | 거짓 | 예 | |
descending |
문서를 descending by key로 리턴합니다. |
예 | 부울 | 거짓 | 예 | |
end_key |
지정된 키에 도달하는 경우 레코드의 리턴을 중지합니다. | 예 | 문자열 또는 JSON 배열 | 예 | ||
end_key_docid |
지정된 문서 ID에 도달하는 경우 레코드의 리턴을 중지합니다. | 예 | 문자열 | 예 | ||
group |
축소된 결과를 키별로 그룹화할지 여부를 지정합니다. 뷰에 축소 함수가 정의된 경우에만 유효합니다. 뷰가 JSON 배열 형식으로 키를 내보내는 경우 group_level 매개 변수를 사용하여 배열 요소의 수에 따라 그룹을 더 줄일 수 있습니다. |
예 | 부울 | 거짓 | 예 | |
group_level |
사용할 그룹 레벨을 지정합니다. 뷰에서 JSON 배열 형태의 키를 사용하는 경우에만 적용됩니다. 암시 그룹은 true. 그룹 수준은 축소된 결과를 지정된 배열 요소 수만큼 그룹화합니다. 설정하지 않으면 결과가 전체 배열 키별로 그룹화되어 각 전체 키에 대해 축소된 값을 반환합니다. |
예 | 숫자 | 예 | ||
include_docs |
응답에 문서의 전체 컨텐츠를 포함시킵니다. | 예 | 부울 | 거짓 | 예 | |
inclusive_end |
지정된 end_key가 있는 행을 포함시킵니다. |
예 | 부울 | 예 | 예 | |
key |
지정된 키와 일치하는 문서만 리턴합니다. 키는 JSON 값이며 URL로 인코딩되어야 합니다. | 예 | JSON 배열 | 예 | ||
keys |
지정한 키와 일치하는 문서만 반환하도록 지정합니다. 보기 함수에서 반환되는 키 유형과 일치하는 키의 JSON 배열을 문자열로 표현합니다. | 예 | 문자열 또는 JSON 배열 | 예 | ||
limit |
리턴되는 문서의 수를 지정된 개수로 제한합니다. | 예 | 숫자 | 예 | ||
reduce |
reduce 함수를 사용합니다. |
예 | 부울 | 예 | 예 | |
skip |
시작부터 이 숫자의 행을 건너뜁니다. | 예 | 숫자 | 0 | 예 | |
stable |
각 요청에 동일한 인덱스 복제본을 사용할지 여부를 지정합니다. 기본값 false 모든 레플리카에 연락하여 가장 빠른 첫 번째 응답자의 결과를 반환합니다. true 로 설정하고 update=false 와 함께 사용할 경우, 선택된 레플리카가 사용 가능한 레플리카 중 가장 빠른 것이 아닐 때 지연 시간이 증가하고 처리량이 감소하는 대가를 치르더라도
일관성이 향상될 수 있습니다.
참고 : 일반적으로 이 매개변수를 |
예 | 부울 | 거짓 | 아니오 | |
stale |
참고: 포괄하는 디자인 문서 내의 모든 뷰를 재구축하지 않고, 오래된 뷰의 결과를 사용할지 여부를 지정합니다.
|
예 | 문자열 | 거짓 | 아니오 | |
start_key |
지정된 키로부터 레코드를 리턴합니다. | 예 | 문자열 또는 JSON 배열 | 예 | ||
start_key_docid |
지정된 문서 ID로부터 레코드를 리턴합니다. | 예 | 문자열 | 예 | ||
update |
사용자에게 응답하기 전에 해당 뷰를 업데이트해야 하는지 여부를 지정합니다true- 뷰를 업데이트한 후 결과를 반환합니다false- 뷰를 업데이트하지 않고 결과를 반환합니다lazy- 업데이트를 기다리지 않고 뷰 결과를 반환하지만 요청 후 즉시 업데이트합니다. |
예 | 문자열 | 예 | 예 |
include_docs=true를 사용하는 경우 성능상 영향이 발생할 수 있습니다.
사용자가 직접 생성한 뷰를 적용하여, 데이터베이스의 특정 파티션에서 전체 내용이 포함된 문서 중 처음 10개의 문서 목록을 가져오는 HTTP 사용 예제를 확인해 보세요.
GET $SERVICE_URL/$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_view/$VIEW_NAME?include_docs=true&limit=10 HTTP/1.1
다음과 같이 HTTP를 사용하고 사용자가 작성한 보기를 적용하여 데이터베이스에서 처음 10개의 문서 목록을 검색하는 예제를 참조하십시오.
GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME?limit=10 HTTP/1.1
사용자가 생성한 ‘ byApplianceProdId ’ 뷰를 적용하여, 데이터베이스의 ‘ small-appliances ’ 파티션에서 전체 내용이 포함된 상위 10개 문서의 목록을 가져오는 방법을 예제를 통해 확인해 보세요.
클라이언트 라이브러리는 GET 대신 POST 메서드를 사용하는데, 이는 두 메서드의 동작이 동일하기 때문입니다.
curl -X GET "$SERVICE_URL/products/_partition/small-appliances/_design/appliances/_view/byApplianceProdId?include_docs=true&limit=10"
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostPartitionViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostPartitionViewOptions viewOptions =
new PostPartitionViewOptions.Builder()
.db("products")
.ddoc("appliances")
.includeDocs(true)
.limit(10)
.partitionKey("small-appliances")
.view("byApplianceProdId")
.build();
ViewResult response =
service.postPartitionView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postPartitionView({
db: 'products',
ddoc: 'appliances',
includeDocs: true,
limit: 10,
partitionKey: 'small-appliances',
view: 'byApplianceProdId'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_partition_view(
db='products',
ddoc='appliances',
include_docs=True,
limit=10,
partition_key='small-appliances',
view='byApplianceProdId'
).get_result()
print(response)
postPartitionViewOptions := service.NewPostPartitionViewOptions(
"products",
"small-appliances",
"appliances",
"byApplianceProdId",
)
postPartitionViewOptions.SetIncludeDocs(true)
postPartitionViewOptions.SetLimit(10)
viewResult, response, err := service.PostPartitionView(postPartitionViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
사용자가 작성한 getVerifiedEmails 보기를 적용하여 데이터베이스에서 처음 10개의 문서 목록을 검색하는 예제를 참조하십시오.
클라이언트 라이브러리는 GET 대신 POST 메서드를 사용하는데, 이는 두 메서드의 동작이 동일하기 때문입니다.
curl -X GET "$SERVICE_URL/users/_design/allusers/_view/getVerifiedEmails?limit=10"
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.limit(10)
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
limit: 10
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
limit=10
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
postViewOptions.SetLimit(10)
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
다음과 같이 요청에 대한 응답 예제를 참조하십시오.
{
"offset": 0,
"rows": [
{
"id": "abc125",
"key": "amelie.smith@aol.com",
"value": [
"Amelie Smith",
true,
"2020-04-24T10:42:59.000Z"
]
},
{
"id": "abc123",
"key": "bob.smith@aol.com",
"value": [
"Bob Smith",
true,
"2019-01-24T10:42:59.000Z"
]
}
],
"total_rows": 2
}
인덱스
보기가 디자인 문서에 정의되어 있는 경우 보기 내에 정의된 정보에 따라 해당 인덱스도 작성됩니다. 인덱스를 사용하여 _id 필드 이외의 기준으로 문서를 찾을 수 있습니다. 예를 들어 필드, 필드의 조합 또는 문서의 컨텐츠를 사용하여 계산된 값을 기준으로 선택할 수 있습니다. 인덱스는 디자인 문서가 작성되는 즉시 채워집니다. 대형 데이터베이스에서는 이 프로세스에 다소 시간이 소요될 수 있습니다.
다음 이벤트 중 하나가 발생하면 인덱스 콘텐츠가 자동으로 점진적으로 업데이트됩니다:
- 데이터베이스에 새 문서가 추가됩니다.
- 데이터베이스에서 기존 문서가 삭제됩니다.
- 데이터베이스에서 기존 문서가 업데이트됩니다.
보기 인덱스는 해당 보기 정의가 변경되거나 동일한 디자인 문서에 있는 다른 보기 정의가 변경되는 경우 완전히 다시 빌드됩니다. 이 재빌드를 통해 보기 정의에 대한 변경사항이 보기 인덱스에 반영됩니다. 재빌드가 수행되도록 하기 위해 디자인 문서가 업데이트될 때마다 보기 정의의 '지문'이 작성됩니다. 지문이 변경되는 경우 보기 인덱스가 다시 빌드됩니다.
보기 인덱스 재빌드는 디자인 문서에 정의된 모든 보기 중 하나의 보기가 변경되는 경우에 수행됩니다. 예를 들어 세 개의 보기가 포함된 디자인 문서가 존재하며 해당 디자인 문서를 업데이트하는 경우 디자인 문서 내에 있는 세 개의 보기 인덱스가 모두 다시 빌드됩니다. 더 큰 데이터베이스용으로 디자인 문서를 변경하려는 경우 디자인 문서 관리 안내서를 참조하십시오.
데이터베이스가 최근에 업데이트된 경우 보기에 액세스할 때 결과가 지연될 수 있습니다. 이 지연은 데이터베이스에 대한 변경사항 수 및 데이터베이스가 수정되었기 때문에 보기 인덱스가 현재 상태인지 여부에 따라 영향을 받습니다.
이러한 지연을 제거할 수는 없습니다. 새로 작성된 데이터베이스의 경우 문서를 삽입하거나 업데이트하기 전에 데이터베이스의 디자인 문서에 보기 정의를 작성하여 지연을 줄일 수 있습니다. 디자인 문서에 보기 정의를 작성하면 문서가 삽입될 때 인덱스에 대한 증분 업데이트가 수행됩니다.
최신 데이터를 보유하는 것보다 응답 속도가 더 중요한 경우 대안은 사용자가 이전 버전의 보기 인덱스에 액세스할 수 있도록 허용하는 것입니다. 이전 버전의 보기 인덱스에 액세스하도록 허용하려면 보기 조회 작성 시 update 조회 문자열 매개변수를 사용하십시오.
인덱싱 프로세서 사용을 발생시키지 않고 이전 인덱스 버전을 저장하려는 경우 "autoupdate": {"indexes": false}를 설정하여 모든 인덱스를 빌드하는 작업을 중지할 수 있습니다. 또는 디자인 문서에 다음 옵션 중 하나를 추가하여 보기의 자동 업데이트를 중지할 수 있습니다. "autoupdate": false를 설정하는
경우 모든 인덱스 유형을 인덱싱하는 작업을 중지할 수 있습니다.
다음 예를 참조하십시오.
{
"_id": "_design/lookup",
"autoupdate": false,
"views": {
"view": {
"map": "function(doc)..."
}
}
}
{
"_id": "_design/lookup",
"autoupdate": {"views": false},
"views": {
"view": {
"map": "function(doc)..."
}
}
}
신선도 보기
기본적으로 모든 인덱스 결과는 데이터베이스의 현재 상태를 반영합니다. IBM Cloudant에서는 백그라운드에서 자동으로 그리고 비동기로 인덱스를 빌드합니다. 이러한 방식은 일반적으로 쿼리를 실행할 때 인덱스가 완전히 최신 상태임을 의미합니다. 만약 이 아닌 경우, 기본적으로 IBM Cloudant 쿼리 시점의 나머지 업데이트를 적용합니다.
IBM Cloudant 몇 가지 매개변수를 제공합니다, 를 제공하여 이 동작을 변경할 수 있습니다. 일반적으로 부작용이 이득보다 크므로 부작용이 이득보다 크므로 사용하지 않는 것이 좋습니다.
매개변수
update 옵션은 보기가 업데이트될 때까지 대기하지 않고 보기 결과를 승인할 준비가 되었는지 여부를 나타냅니다. 기본값은 결과가 리턴되기 전에 보기를 업데이트함을 의미하는 true입니다. lazy 값은 보기가 업데이트되기 전에 결과를 리턴하지만 이후에는 해당 보기가 업데이트됨을 의미합니다.
IBM Cloudant 는 백그라운드에서 인덱스를 최신 상태로 유지하기 위해 노력하지만, update=false 또는 update=lazy 로 쿼리를 실행했을 때 뷰가 얼마나 오래된 상태인지에 대해서는 보장할 수 없습니다.
stable 옵션은 일치하는 하나의 샤드 세트로부터 결과를 가져오는 것을 선호하는지 여부를 나타냅니다. false 값은 사용 가능한 모든 샤드 복제본에 대해 쿼리가 수행되며 IBM Cloudant 가장 빠른 응답을 사용합니다. 반면, 설정
stable=true 를 사용하면 데이터베이스가 인덱스의 복제본 하나를 인덱스의 복제본 하나를 사용하도록 합니다.
stable=true 사용하면 인덱스 복사본 중 하나만 참조하므로 지연 시간이 길어질 수 있습니다 인덱스 복사본 중 하나만 참조하므로 대기 시간이 길어질 수 있습니다 더 빠르게 응답할 수 있습니다.
매개변수 결합
stable=false 과 update=false 을 지정하면 동일한 쿼리에서도 결과 간의 동일한 쿼리에 대해 데이터베이스를 변경하지 않고도 데이터베이스 변경을 하지 않아도 결과가 더 큰 불일치를 보입니다. 다음과 같은 경우를 제외하고는 이 조합을 사용하지 않는 것이 좋습니다 시스템이 이 동작을 견딜 수 있다고 확신하는 경우가 아니라면 사용하지 않는 것이 좋습니다.
리턴되는 행 정렬
보기 조회에서 리턴되는 데이터는 배열 양식입니다. 배열 내의 각 요소는 표준 UTF-8 정렬 알고리즘을 사용하여 정렬됩니다. 이 정렬은 view 함수에 정의된 키에 적용됩니다.
다음 표에는 출력의 기본 순서가 표시되어 있습니다.
| 값 | 순서 |
|---|---|
null |
처음 |
false |
|
true |
|
| 숫자 | |
| 텍스트(소문자) | |
| 텍스트(대문자) | |
| 배열(이 표에서 제공된 순서를 사용하여 각 요소의 값에 따라) | |
| 오브젝트(이 표에서 제공된 순서를 사용한 키 순서에서 키의 값에 따라) | 마지막 |
descending 조회 값을 true로 설정하여 리턴되는 보기 정보의 순서를 역방향으로 지정할 수 있습니다.
keys 매개변수를 지정하는 보기 요청을 실행하는 경우 제공된 keys 배열과 동일한 순서로 결과가 리턴됩니다.
다음과 같이 HTTP를 사용하여 레코드를 역방향 정렬 순서로 요청하는 예제를 참조하십시오.
GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME?descending=true HTTP/1.1
Accept: application/json
레코드를 역방향 정렬 순서로 요청하는 예제를 참조하십시오.
두 메소드는 동작이 유사하므로 클라이언트 라이브러리는 GET 대신 POST 메소드를 사용합니다.
curl -X GET "$SERVICE_URL/users/_design/allusers/_view/getVerifiedEmails?descending=true"
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.descending(true)
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
descending: true
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
descending=True
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
postViewOptions.SetDescending(true)
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
다음과 같이 레코드를 역방향 정렬 순서로 요청하는 경우의 응답 예제를 참조하십시오.
{
"total_rows": 2,
"offset": 0,
"rows": [
{
"id": "abc123",
"key": "bob.smith@aol.com",
"value": [
"Bob Smith",
true,
"2019-01-24T10:42:59.000Z"
]
},
{
"id": "abc125",
"key": "amelie.smith@aol.com",
"value": [
"Amelie Smith",
true,
"2020-04-24T10:42:59.000Z"
]
}
]
}
시작 및 종료 키 지정
start_key 및 end_key 조회 인수를 사용하여 보기 조회 시 리턴되는 값의 범위를 지정할 수 있습니다.
정렬 방향은 항상 먼저 적용됩니다. 그런 다음 start_key 및 end_key 조회 인수를 사용하여 필터링이 적용됩니다. 정렬 및 필터 계획을 결합했을 때 키 범위와 일치하는 행이 없을 수 있습니다.
다음과 같이 HTTP를 사용하여 start_key 및 end_key 조회 인수가 포함된 글로벌 조회를 작성하는 예제를 참조하십시오.
GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME?start_key="alpha"&end_key="beta" HTTP/1.1
start_key 및 end_key 조회 인수가 포함된 글로벌 조회의 예제를 참조하십시오.
클라이언트 라이브러리는 GET 대신 POST 메서드를 사용하는데, 이는 두 메서드의 동작이 동일하기 때문입니다.
curl -X GET "$SERVICE_URL/users/_design/allusers/_view/getVerifiedEmails?start_key=\"alpha\"&end_key=\"beta\""
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.startKey("alpha")
.endKey("beta")
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
startKey: 'alpha',
endKey: 'beta'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
start_key='alpha',
end_key='beta'
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
postViewOptions.StartKey = "alpha"
postViewOptions.EndKey = "beta"
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
예를 들어, 다음과 같은 start_key 을 사용할 때 하나의 결과를 반환하는 데이터베이스가 있다면 alpha를 사용하고 end_key로 beta를 사용할 때 1개의 결과가 리턴되는 데이터베이스가 있는 경우 역방향 순서에서는 400(잘못된 요청) 오류가 발생할 수 있습니다. 그 이유는 키 필터가 적용되기 전에 보기의
항목이 역방향으로 지정되기 때문입니다.
다음과 같이 HTTP 를 사용하여 start_key 및 end_key 쿼리 구문 분석 오류가 발생할 수 있습니다:
GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME?descending=true&start_key="alpha"&end_key="beta" HTTP/1.1
다음과 같이 start_key 및 end_key의 순서를 역방향으로 지정하는 경우 400 오류가 발생할 수 있는 이유를 보여주는 예제를 참조하십시오.
클라이언트 라이브러리는 GET 대신 POST 메서드를 사용하는데, 이는 두 메서드의 동작이 동일하기 때문입니다.
curl -X GET "$SERVICE_URL/users/_design/allusers/_view/getVerifiedEmails?descending=true&start_key=\"alpha\"&end_key=\"beta\""
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.descending(true)
.startKey("alpha")
.endKey("beta")
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
descending: true,
startKey: 'alpha',
endKey: 'beta'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
descending=True,
start_key='alpha',
end_key='beta'
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
postViewOptions.SetDescending(true)
postViewOptions.StartKey = "alpha"
postViewOptions.EndKey = "beta"
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
end_key인 beta가 start_key인 alpha 앞에 표시되어 조회 구문 분석 오류가 발생합니다.
솔루션은 정렬 순서만이 아니라 start_key 및 end_key 매개변수 값도 역방향으로 지정하는 것입니다.
다음 예제에서는 descending 조회 인수를 사용하고 start_key 및 end_key 조회 매개변수를 역방향으로 지정하여 출력 순서를 역방향으로 지정하고 올바르게 필터링하는 방법을 보여줍니다.
다음과 같이 HTTP를 사용하여 글로벌 조회에 올바른 필터링 및 정렬을 적용하는 예제를 참조하십시오.
GET $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME?descending=true&start_key="beta"&end_key="alpha" HTTP/1.1
다음과 같이 글로벌 조회에 올바른 필터링 및 정렬을 적용하는 예제를 참조하십시오.
클라이언트 라이브러리는 GET 대신 POST 메서드를 사용하는데, 이는 두 메서드의 동작이 동일하기 때문입니다.
curl -X GET "$SERVER_URL/users/_design/allusers/_view/getVerifiedEmails?descending=true&start_key=\"beta\"&end_key=\"alpha\""
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.descending(true)
.startKey("beta")
.endKey("alpha")
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
descending: true,
startKey: 'beta',
endKey: 'alpha'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
descending=True,
start_key='beta',
end_key='alpha'
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
postViewOptions.SetDescending(true)
postViewOptions.StartKey = "beta"
postViewOptions.EndKey = "alpha"
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
키 목록을 사용하여 보기 조회
사용할 키 목록을 제공하여 조회를 실행할 수도 있습니다.
이러한 방식으로 데이터베이스에서 정보를 요청하는 경우 지정된 디자인 문서 $DDOC의 지정된 $VIEW_NAME을 사용합니다.
GET 메소드의 keys 매개변수와 마찬가지로 POST 메소드를 사용하여 보기 결과를 검색하는 데 사용할 키를 지정할 수 있습니다. 다른 모든 측면에서 POST 메소드는 GET API 요청과 동일합니다.
특히 조회 문자열 또는 JSON 본문에서 해당 조회 매개변수를 사용할 수 있습니다.
다음과 같이 모든 사용자를 리턴하는 HTTP 요청 예제를 참조하십시오(보기의 키가 amelie.smith@aol.com 또는 bob.smith@aol.com과 일치하는 경우).
POST $SERVICE_URL/$DATABASE/_design/$DDOC/_view/$VIEW_NAME HTTP/1.1
Content-Type: application/json
{
"keys": [
"amelie.smith@aol.com",
"bob.smith@aol.com"
]
}
모든 사용자를 반환하는 전역 쿼리의 예시를 살펴보세요(이 뷰에서 일치하는 키는 amelie.smith@aol.com 또는 bob.smith@aol.com 중 하나입니다):
curl -X POST "$SERVICE_URL/users/_design/allusers/_view/getVerifiedEmails" -H "Content-Type: application/json" --data '{
"keys": [
"amelie.smith@aol.com",
"bob.smith@aol.com"
]
}'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
import java.util.Arrays;
Cloudant service = Cloudant.newInstance();
PostViewOptions viewOptions = new PostViewOptions.Builder()
.db("users")
.ddoc("allusers")
.view("getVerifiedEmails")
.keys(Arrays.asList("amelie.smith@aol.com", "bob.smith@aol.com"))
.build();
ViewResult response =
service.postView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postView({
db: 'users',
ddoc: 'allusers',
view: 'getVerifiedEmails',
keys: ['amelie.smith@aol.com', 'bob.smith@aol.com']
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_view(
db='users',
ddoc='allusers',
view='getVerifiedEmails',
keys=['amelie.smith@aol.com', 'bob.smith@aol.com']
).get_result()
print(response)
postViewOptions := service.NewPostViewOptions(
"users",
"allusers",
"getVerifiedEmails",
)
keys := []interface{}{"amelie.smith@aol.com", "bob.smith@aol.com"}
postViewOptions.SetKeys(keys)
viewResult, response, err := service.PostView(postViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
응답에는 표준 보기 정보가 포함되지만 키가 일치하는 문서만 포함됩니다.
다음과 같이 키 목록을 사용하여 조회를 실행한 이후의 응답 예제를 참조하십시오.
{
"total_rows": 2,
"offset": 0,
"rows": [
{
"id": "abc125",
"key": "amelie.smith@aol.com",
"value": [
"Amelie Smith",
true,
"2020-04-24T10:42:59.000Z"
]
},
{
"id": "abc123",
"key": "bob.smith@aol.com",
"value": [
"Bob Smith",
true,
"2019-01-24T10:42:59.000Z"
]
}
]
}
페이지 매김
보기에 키 기반 페이지 매김을 사용합니다. 구체적인 세부 사항 및 예는 API 문서 항목 보기 쿼리에서 페이징을 참조하세요.
다중 문서 페치
다음 섹션에서는 데이터베이스에 저장된 다수의 문서에 대한 ‘ POST ’ 요청에 대해 다룹니다.
클라이언트 애플리케이션의 경우 이 기술은 복수의 GET API 요청을 사용하는 것보다 더 효율적입니다.
하지만 include_docs=true의 경우 고유한 보기에 액세스하는 것과 비교하여 더 많은 처리 시간이 필요할 수 있습니다.
그 이유는 보기 조회에서 include_docs=true를 사용하는 경우 클라이언트 애플리케이션에 대한 응답을 생성하기 위해 모든 결과 문서를 검색해야 하기 때문입니다. 사실상 일련의 모든 문서에 대한 GET 요청이 실행되어 각각 다른 애플리케이션 요청과 리소스에 대해 경합하게 됩니다.
이러한 효과를 완화하는 한 가지 방법은 보기 인덱스 파일에서 직접 결과를 검색하는 것입니다. 보기 인덱스 파일에서 직접 결과를 검색하려면 include_docs=true를 생략하십시오. 대신 디자인 문서의 map 함수에서 보기 인덱스의 값으로 필요한 필드를 생성하십시오.
예를 들어 map 함수에서 다음과 같은 디자인 스펙을 사용할 수 있습니다.
function(user) {
if(user.email_verified === true) {
emit(user.email, {name: user.name, email_verified: user.email_verified, joined: user.joined});
}
}
다음과 같이 HTTP를 사용하여 파티션 내에서 나열된 키와 일치하는 문서의 전체 컨텐츠를 가져오는 요청 예제를 참조하십시오.
POST $SERVICE_URL/$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_view/$VIEW_NAME HTTP/1.1
Content-Type: application/json
{
"include_docs": true,
"keys" : [
"1000043",
"1000044"
]
}
다음과 같이 products 파티션 내에서 나열된 키와 일치하는 문서의 전체 컨텐츠를 가져오는 요청 예제를 참조하십시오.
curl -X POST "$SERVICE_URL/products/_partition/small-appliances/_design/appliances/_view
/byApplianceProdId" -H "Content-Type: application/json" --data '{
"include_docs": true,
"keys" : [
"1000043",
"1000044"
]
}'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostPartitionViewOptions;
import com.ibm.cloud.cloudant.v1.model.ViewResult;
import java.util.Arrays;
Cloudant service = Cloudant.newInstance();
PostPartitionViewOptions viewOptions =
new PostPartitionViewOptions.Builder()
.db("products")
.ddoc("appliances")
.keys(Arrays.asList("1000043", "1000044"))
.includeDocs(true)
.partitionKey("small-appliances")
.view("byApplianceProdId")
.build();
ViewResult response =
service.postPartitionView(viewOptions).execute()
.getResult();
System.out.println(response);
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const service = CloudantV1.newInstance({});
service.postPartitionView({
db: 'products',
ddoc: 'appliances',
keys: ['1000043', '1000044'],
includeDocs: true,
partitionKey: 'small-appliances',
view: 'byApplianceProdId'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_partition_view(
db='products',
ddoc='appliances',
keys=['1000043', '1000044'],
include_docs=True,
partition_key='small-appliances',
view='byApplianceProdId'
).get_result()
print(response)
postPartitionViewOptions := service.NewPostPartitionViewOptions(
"products",
"small-appliances",
"appliances",
"byApplianceProdId",
)
keys := []interface{}{"1000043", "1000044"}
postPartitionViewOptions.SetKeys(keys)
postPartitionViewOptions.SetIncludeDocs(true)
viewResult, response, err := service.PostPartitionView(postPartitionViewOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(viewResult, "", " ")
fmt.Println(string(b))
이전 Go 예제에서는 다음 가져오기 블록이 필요합니다.
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
모든 Go 예제에서는 service 오브젝트가 초기화되어야 합니다. 자세한 정보는 API 문서 인증 섹션 예제를 참조하십시오.
다음과 같이 제공된 키와 일치하는 각각의 어플라이언스에 대한 전체 문서를 리턴하는 응답 예제(축약됨)를 참조하십시오.
{
"total_rows": 4,
"offset": 1,
"rows": [
{
"id": "small-appliances:1000043",
"key": "1000043",
"value": [
"Bar",
"Pro",
"A professional, high powered innovative tool with a sleek design and outstanding performance"
],
"doc": {
"_id": "small-appliances:1000043",
"_rev": "2-b595c929aabc3ab13415cd0cc03e665d",
"type": "product",
"taxonomy": [
"Home",
"Kitchen",
"Small Appliances"
],
"keywords": [
"Bar",
"Blender",
"Kitchen"
],
"productId": "1000043",
"brand": "Bar",
"name": "Pro",
"description": "A professional, high powered innovative tool with a sleek design and outstanding performance",
"colours": [
"black"
],
"price": 99.99,
"image": "assets/img/barpro.jpg"
}
},
{
"id": "small-appliances:1000044",
"key": "1000044",
"value": [
"Baz",
"Omelet Maker",
"Easily make delicious and fluffy omelets without flipping - Innovative design - Cooking and cleaning is easy"
],
"doc": {
"_id": "small-appliances:1000044",
"_rev": "2-d54d022a9407ab9f06b1889cb2ab8a6e",
"type": "product",
"taxonomy": [
"Home",
"Kitchen",
"Small Appliances"
],
"keywords": [
"Baz",
"Maker",
"Kitchen"
],
"productId": "1000044",
"brand": "Baz",
"name": "Omelet Maker",
"description": "Easily make delicious and fluffy omelets without flipping - Innovative design - Cooking and cleaning is easy",
"colours": [
"black"
],
"price": 29.99,
"image": "assets/img/bazomeletmaker.jpg"
}
}
]
}