2013-02-02 3 views
1

안녕하세요. 이제 CouchDB를 처음 사용해 보았지만 정말 멋지게 보입니다.하지만 실제로 고민 중입니다. 은 간단해야합니다!CouchDB에서 REST 호출에서 매개 변수를 가져 오는 방법은 무엇입니까?

나는 같이 구성 문서가 있습니다

{ 
    "_id" : "245431e914ce42e6b2fc6e09cb00184d", 
    "_rev": "3-2a69f0325962b93c149204aa3b1fa683", 
    "type": "student", 
    "studentID": "12345678", 
    "Name": "Test", 
    "group: "A" 
} 

을 그리고 같은 그런 http://couchIP/student?group=A이나 뭐 같은 쿼리를 그들에게 그들에 접근하고 싶습니다. 뷰가 내가 필요한 것을 여기에 있습니까? 뷰의 맵 함수에서 쿼리의 매개 변수를 가져 오는 방법을 이해하지 못합니다. 예 :

function(doc,req) { 
    if(req.group==='A'){ 
     emit(doc.id, doc.name); 
    } 
} 

여기에서 내 문제는 무엇입니까? 미리 감사드립니다. 저는 이것이 소파라고 확신합니다.

이미 http://guide.couchdb.org/을 통해 읽었지만 실제로 질문에 대답하지 않았습니다!

+0

보기 기능은 요청 상태가 아니며 의존해서도 안됩니다. 'key' 쿼리 매개 변수를 사용하여 doc.group 및 query 뷰별로 레코드를 방출해야합니다. 여전히 생각하는 경우 목록 기능을 사용하는 것보다 사용자 요청과 상호 작용할 필요가 있습니다. – Kxepal

+0

내가 초급자라고 말했듯이, 기본적으로 나는 http : // query + params를 만들 수있는 소파 기능을 찾고 있습니다 - 어쨌든 그 매개 변수를 사용하여 데이터를 입력하거나 검색하지만, 그것들을 검색 할 방법이 없습니다 params를 사용하거나 소파에서 사용하는 것이 좋습니다. 목록 기능, 고마워요 – John

답변

1

원하는 결과를 얻으려면보기가 필요합니다.

디자인 문서를 볼 때 다음 맵 기능을 정의하십시오.

function(doc) { 
    if(doc.group){ 
    emit(doc.group,null); 
    } 
} 

결과는 다음 URL에서 얻을 수 있습니다

http://couchIP:5984/dbname/_design/students/_view/byGroup?startkey="A"&endkey="A"&include_docs=true 

친화적 인 URL에 CouchDB를을 위해 (의 뷰 "byGroup을"이름을하자이 "_design/학생"라는 이름의 설계 문서에 사는 가정) 또한 URL 재 작성 옵션을 제공합니다.

1

뷰와 키/페어 값을 반환하는 관련성에 대한 추가 정보가 필요합니다.

당신이보기에서 돌아오고 싶은 것이 명확하지 않으므로 추측하겠습니다. 당신은 전체 문서는 당신이 보는 값으로 반환됩니다에 대해 조회 할 수있는 열쇠로 그룹 이름을 방출합니다

function (doc) { emit(doc.group, doc) }; 

이 : 당신이 전체 문서를 반환 할 경우 같은보기를 만들 것 그것.

당신은 당신이 같은 것을하고 싶어하는 사용자의 이름에 액세스 할 수 있도록하려면 :

function (doc) { emit(doc.group, doc.name) }; 
+0

내 문제는 내가 무엇을 반환하고자하는 아니지만, 쿼리에서 매개 변수를 가져 오는 방법 또는 내가 이것을 할 필요가보기인지 여부입니다. 다음은 현재 저장된 뷰 중 하나 인 'http : // localhost : 5984/spms/_design/test/_view/test'입니다. 어떻게 매개 변수를 추가하여 어떻게 사용할 수 있습니까? 'http : // localhost : 5984/spms/_design/test/_view/test? ID = xxx' - 내 주요 문제는지도 함수에서 매개 변수의 값을 검색 할 수 없다는 것입니다. – John

1

귀하의 질문은 view가하는 일에 대한 오해에서 발생합니다. 보기는 map/reduce을 사용하여 데이터 표현을 생성합니다. 뷰는 DB 문서의 변경 사항에 따라 업데이트되기 때문에 쿼리에서 뷰의 출력을 제어 할 수 없습니다.

list을 사용하는 것도 좋은 방법이 아닙니다. list에서 요청에 대한 지식을 사용하여 쿼리 매개 변수에 따라 다른 출력을 생성 할 수 있지만 couchdb는 ETags을 캐싱에 사용하므로 대부분의 경우 목록에 관계없이 동일한 대답을 얻습니다. 매개 변수는 변경되지 않습니다. 이 경우에는 couchdb를 속이기위한 트릭이 있지만 이는 서로 다른 두 명의 사용자를 사용하는 것을 의미하지만이 방법을 시도하지는 않습니다. 목표를 달성하는 쉬운 방법이 있으며 group을 키로 사용하여 문제를 해결할 수 있기 때문입니다. 귀하의지도 기능.

+0

안녕하세요 joscos, 답변 주셔서 감사합니다. 지금 나는 매우 혼란 스럽다. REST API를 사용하면 DB 기능 전체를 사용할 수 있다고 생각했습니다. 그룹이 A, B 등인 모든 문서를 선택하십시오. 기본 기능이 될 것이라고 생각했기 때문에 couchDB를 바보짓을하거나 해킹 할 필요가 없습니다. 모든 사람이 DB에서 필요로하는 것이기 때문에 !! – John

+1

글쎄, couchdb는 조금 다릅니다. 임의 (ad-hoc) 쿼리를 실행할 수있는 옵션이 없습니다. 이것은 제한 사항이지만 뷰와 쿼리 API를 사용하면 여전히 많은 작업을 수행 할 수 있습니다. 당신이 할 수있는 일과 그것을하는 방법을 이해하기 위해이 글을 읽는 것이 좋습니다 : http://guide.couchdb.org/draft/cookbook.html – joscas

+1

또한, 많은 SQL을 놓치지 만 여전히 어떤 기능을 원한다면 소파에 앉으면 몽고브가 좋은 선택입니다. – joscas

관련 문제