couchDB 문서

5569 단어
모든 문 서 는 자체 적 으로 포 함 된 데이터 유닛 으로 일련의 데이터 항목 의 집합 이다.모든 데이터 항목 에는 이름과 대응 하 는 값 이 있 습 니 다. 값 은 문자열, 숫자, 날짜 등 간단 한 데이터 형식 일 수도 있 습 니 다.질서 있 는 목록 과 관련 대상 등 복잡 한 유형 일 수도 있다.문서 마다 전역 에 유일한 식별 자 (ID) 와 수정 버 전 번호 (revision number) 가 있 습 니 다.
메모리 형식: JSON
필드 설명
_id: 전역 에 있 는 유일한 식별 자 는 하나의 문 서 를 표시 하 는 데 사 용 됩 니 다. _rev: 버 전 번 호 를 수정 하여 다 중 버 전 병행 제어 (Multiversion concurrency control, MVVC) 를 실현 합 니 다. _attachments: 내장 형 첨부 파일 은 base 64 인 코딩 형식 으로 문서 의 한 필드 로 저장 합 니 다.
가장 간단 한 문서 구조
문서 에 최소한id 와rev 필드, 예 는 다음 과 같 습 니 다.
{
   "_id": "5fecc0d7fe5acac6b46359b5eeefb614",
   "_rev": "1-967a00dff5e02add41819138abb3284d"
}

couchDB 디자인 문서
디자인 문 서 는 특수 한 문서 로 그 ID 는 반드시디자인 / 시작.디자인 문서 의 존 재 는 CouchDB 를 사용 하여 웹 애플 리 케 이 션 을 개발 하 는 기초 이다.CouchDB 에서 웹 애플 리 케 이 션 은 디자인 문서 와 대응 합 니 다. 디자인 문서 에 다음 과 같은 특수 한 필드 를 포함 할 수 있 습 니 다.
views 는 영구적 인 보기 정 의 를 포함 합 니 다. shows 는 문 서 를 비 JSON 형식 으로 변환 하 는 방법 을 포함 합 니 다. lists 는 보기 실행 결 과 를 비 JSON 형식 으로 변환 하 는 방법 을 포함 합 니 다. validate_doc_update 는 문서 업데이트 가 올 바른 지 검증 하 는 방법 을 포함 합 니 다.
디자인 문서 구조:
{ "_id" : "_design/${docName}", "_rev" : "${revision}",
"language" : "javascript",

"views": {
    ...
}

"shows": {
    ...
}

"lists": {
    ...
}

"_attachments": {
    ...
}

}
가장 간단 한 디자인 문서 구조
{
    "_id" : "_design/example",
    "views" : {
        "foo" : {
        "map" : "function(doc){ emit(doc._id, doc._rev)}"
        }
    }
}

views 필드
영구적 인 보기 정 의 를 포함 합 니 다.
구체 적 인 참고 문서: couchDB 보기
쇼 필드
기본 서식
{
    "_id": "_design/examples",
    "shows": {            
        "people": "function(doc, req) { /*...*/ }"
    }
}

show 방법
예제 코드:
function(doc, req) {
  return {
    body: "Hello World"
  }
}

모든 쇼 방법 에는 두 개의 인자 가 있 습 니 다: doc 와 req 그 중에서 doc 는 요청 한 문서 ID 에 대응 하 는 문서 내용 을 표시 하고 req 는 현재 요청 과 관련 된 내용 을 표시 하 며 JSON 대상 입 니 다.이 JSON 대상 매개 변 수 는 다음 과 같 습 니 다.
body       GET     ,      undefined;   POST/PUT     ,           。
cookie             cookie 。
form             (Content Type) application/x-www-form-urlencoded  ,           JSON   。
info              CouchDB       。
path            ,       。
query                       JSON   。
verb          HTTP      ,    GET/POST/PUT/DELETE 。

여기 서 주의해 야 할 것 은 요청 한 문서 ID 와 show 방법의 매개 변수 doc 의 관계 입 니 다. 구체 적 인 상황 은 다음 과 같 습 니 다.
요청 에 문서 ID 가 들 어 왔 고 데이터베이스 에 이 ID 에 대응 하 는 문서 가 존재 합 니 다. 이 경우 doc 의 값 은 이 ID 에 대응 하 는 문서 내용 입 니 다. 요청 에 문서 ID 가 들 어 왔 지만 데이터베이스 에 해당 하 는 문서 가 없습니다. 이 경우 doc 의 값 은 null 이 며, req. docId 를 통 해 이 ID 를 가 져 올 수 있 습 니 다.일반적인 행동 은 ID 가 req. docId 인 문 서 를 만 드 는 것 입 니 다. 요청 에 문서 ID 가 전송 되 지 않 았 습 니 다: 이 경우 doc 와 req. docId 의 값 은 모두 null 입 니 다.일반적인 행동 은 CouchDB 에서 ID 를 만 들 고 문 서 를 만 드 는 것 입 니 다.
show 방법 은 HTTP 응답 정 보 를 포함 한 JSON 대상 을 되 돌려 야 합 니 다.이 JSON 대상 에는 다음 필드 가 포함 되 어 있 습 니 다.
code          HTTP        ,    200 。
headers       HTTP     ,    JSON   , {"Content-Type" : "application/xml"}。
json               JSON         。
body                          。
base64           base64               。

HTTP 응답 내용 을 나타 내 는 json, body, base 64 는 하나만 설정 하면 됩 니 다.
접근 문법
GET /db/_design/examples/_show/people/doc_id
GET /db/_design/examples/_show/people/doc_id?format=xml&details=true

목록 필드
list 방법 은 보 기 를 비 JSON 형식 으로 변환 하 는 데 사 용 됩 니 다.보기 의 실행 결 과 는 여러 줄 의 데 이 터 를 포함 하기 때문에 list 방법 은 각 줄 의 데 이 터 를 교체 하고 각각 포맷 해 야 하기 때문에 하나의 보기 의 실행 결과 에 대해 list 방법 은 여러 번 호출 됩 니 다.list 방법의 호출 과정 은 교체 하기 전에 한 번 호출 하고 결과 의 모든 줄 데 이 터 를 한 번 호출 하 며 마지막 으로 교체 한 후에 다시 호출 하 는 것 입 니 다.
기본 서식
{
    "_id": "_design/examples",
    "views" {
        "posts-by-date": {"map": "function(doc){ /*...*/ }"},
        "posts-by-tag": {"map": "function(doc){ /*...*/ }"},
        "people-by-name": {"map": "function(doc) { /*...*/ }"}
    },
    "lists": {
        "index-posts": "function(head, req) { /*...*/ }",
        "browse-people": "function(head, req) { /*...*/ }"
    }
}

list 방법
모든 list 방법 에는 두 개의 인자 가 있 습 니 다: head, req
방법 예시:
function(head, req) {
  var row;
  start({
    "headers": {
      "Content-Type": "text/html"
    }
  });
  while(row = getRow()) {
    send(row.value);
  }
}

접근 문법
GET /db/_design/examples/_list/index-posts/posts-by-date?descending=true&limit=10
GET /db/_design/examples/_list/index-posts/posts-by-tag?key="howto"
GET /db/_design/examples/_list/browse-people/people-by-name?startkey=["a"]&limit=10

예제 코드
    :

{
   "_id": "_design/example",
   "views": {
       "foo": {
           "map": "function(doc){ emit(doc._id, doc._rev)}"
       }
   },
   "lists": {
       "index-posts": "function(head, req) {var row; start({\"headers\": {\"Content-Type\": \"text/html\"}});while(row = getRow()) {send(row.value);}}"
   }
}

curl  :

curl "http://127.0.0.1:5984/testdb2/_design/example/_list/index-posts/foo"

좋은 웹페이지 즐겨찾기