반응형
CouchDB wiki에 있는 내용을 보고 정리한 내용입니다.
제가 하고싶은걸 실습한 것이기 때문에 삭제된 내용도 있습니다.view(뷰)는 Couch document를 쿼리하거나 리포팅할때 사용되는 주요툴이다.
뷰는 자바스크립트 function으로 정의된다.
function(doc) {
emit(null, doc);
}
Creating Views
permanent view를 만들기 위해 function은 특별한 design document에 먼저 저장되어 있어야 한다.
design document의 id는 _design으로 시작하고 view attribute는 map과 optional하게 reduce를 갖는다.
design document의 모든 view는 index되어 있다.
design document
{
"_id":"_design/company",
"_rev":"12345",
"language": "javascript",
"views":
{
"all": {
"map": "function(doc) { if (doc.Type == 'customer') emit(null, doc) }"
},
"by_lastname": {
"map": "function(doc) { if (doc.Type == 'customer') emit(doc.LastName, doc) }"
},
"total_purchases": {
"map": "function(doc) { if (doc.Type == 'purchase') emit(doc.Customer, doc.Amount) }",
"reduce": "function(keys, values) { return sum(values) }"
}
}
}
Altering/Changing Views
하나의 뷰나 여러개의 뷰들을 바구기 위해선 document바꿀때랑 똑같다.
Access/Query
database에 document가 한번 저장되어있으면 모든 view는 이 URL로 반환받을 수 있다.
http://localhost:5984/database/_design/company/_view/all
요청은 이렇게..
GET /some_database/_design/company/_view/all HTTP/1.0
Date: Thu, 17 Aug 2006 05:39:28 +0000GMT
응답은 다음과 같다.
HTTP/1.1 200 OK
Date: Thu, 17 Aug 2006 05:39:28 +0000GMT
Content-Length: 318
Connection: close
{
"total_rows": 3,
"offset": 0,
"rows": [{
"id":"64ACF01B05F53ACFEC48C062A5D01D89",
"key": null,
"value": {
"LastName":"Katz",
"FirstName":"Damien",
"Address":"2407 Sawyer drive, Charlotte NC",
"Phone":012555754211
}
}, {
"id":"5D01D8964ACF01B05F53ACFEC48C062A",
"key": null,
"value": {
"LastName":"Kerr",
"FirstName":"Wayne",
"Address":"123 Fake st., such and such",
"Phone":88721320939
}
}, {
"id":"EC48C062A5D01D8964ACF01B05F53ACF",
"key": null,
"value":
{
"LastName":"McCracken",
"FirstName":"Phil",
"Address":"1234 Fake st., such and such",
"Phone":7766552342
}
}
]
}
Temporary Views
한번 쿼리 날리고 말것(CouchDB database에 view를 저장하고 싶지않으면) _temp_view라는 특별한 view를 통해 할 수 있다.
Temporary View는 개발중에만 사용하는 것이 좋다.
요청
POST /some_database/_temp_view HTTP/1.0
Content-Length: 48
Date: Mon, 10 Sep 2007 17:11:10 +0200
Content-Type: application/json
{
"map" : "function(doc) { if (doc.foo=='bar') { emit(null, doc.foo); } }"
}
응답
{
"total_rows": 1,
"offset": 0,
"rows": [{
"id": "AE1AD84316B903AD46EF396CAFE8E50F",
"key": null,
"foo": "bar"
}
]
}
NOTE : CouchDB 0.9.0에선 _temp_view에 POST 요청시 Content-Type: application/json를 써줘야한다.
Querying Options
아래와 같은 URL query arguments가 허용된다.
* GET
key=keyvalue
startkey=keyvalue
startkey_docid=docid
endkey=keyvalue
endkey_docid=docid
limit=max rows to return This used to be called "count" previous to Trunk SVN r731159
stale=ok
descending=true
skip=number of rows to skip
group=true Version 0.8.0 and forward
group_level=int
reduce=false Trunk only (0.9)
include_docs=true Trunk only (0.9)
* POST
{"keys": ["key1", "key2", ...]} Trunk only (0.9)
반응형
'backend > DataBase' 카테고리의 다른 글
[Amazon DynamoDB]세미나 자료 (2) | 2014.03.22 |
---|---|
[MongoDB] old lock file: "/data/db/mongod.lock" 에러시 해결방법 (0) | 2012.10.03 |
CouchDB 관련 링크 (0) | 2010.02.09 |
[CouchDB] Apache CouchDB 0.10.0 이 나왔답니다. (2) | 2009.10.14 |
[CouchDB] HTTP Document API (0) | 2009.07.14 |
[CouchDB] Compaction (0) | 2009.07.13 |
[CouchDB] HTTP database API (2) | 2009.07.09 |
[CouchDB] API Cheatsheet (0) | 2009.07.09 |