2012-02-08 7 views
6

다음이 작동하지 않는 사람이 왜 나에게 설명 할 수 :CouchDB를 그룹 수준 및 키 범위

을 다음과 같은 문서 구조 가정 :과 같이 정의

{ 
    "_id": "520fb089a6cb538b1843cdf3cca39a15", 
    "_rev": "2-f96c27d19bf6cb10268d6d1c34799931", 
    "type": "nosql", 
    "location": "AZ", 
    "date": "2012/03/01 00:00:00", 
    "amount": 1500 
} 

그리고지도 기능 :

function(doc) { 
    var saleDate = new Date(doc.date); 
    emit([doc.location,saleDate.getFullYear(),saleDate.getMonth()+1],doc.amount); 
} 

그리고 감속기에 내장 된 _sum 기능을 사용하십시오.

당신이이 같은 결과를 얻을 수 (= 그룹 true)를이 실행 : 당신이 이런 식으로 쿼리를 변경하는 경우 지금

{"rows":[ 
{"key":["AZ",2012,2],"value":224}, 
{"key":["AZ",2012,3],"value":1500}, 
{"key":["WA",2011,12],"value":1965}, 
{"key":["WA",2012,1],"value":358} 
]} 

을 :

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2 

당신은이 같은 결과를 얻을 수 :

{"rows":[ 
{"key":["AZ",2012],"value":1724}, 
{"key":["WA",2011],"value":1965}, 
{"key":["WA",2012],"value":358} 
]} 

2011 년 모든 판매가 "WA"인지 알고 싶다면 exe를 사용할 수 없습니까? 이런 귀여운 모습 :

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2&key=["WA",2011] 

이 예는 NoSQL 테이프의 유용한 비디오에서 가져온 것입니다. 필터링이 하지reducemap의 결과에서 수행되기 때문에

http://nosqltapes.com/video/understanding-mapreduce-with-mike-miller

답변

8

당신은 항상 키의 범위를 제공해야합니다. (제대로 URL 인코딩 된 경우)

예를 들어, 다음과 같은 매개 변수가 작동합니다 :

?group_level=2&startkey=["WA",2011]&endkey=["WA",2011,{}] 

당신은 어떻게 작동하는지에 대한 view collation 이해 읽을 수 있습니다.

+0

이제는 효과가 있었고 지금은 더 의미가 있습니다. ViewCollation 가이드에 대한 링크도 제공해 주셔서 감사합니다. – eggsy84

+1

Reduce 단계의 결과에서 수행되었다고 가정했지만 이제는 맵 기능의 결과로 완료되었음을 이해합니다. 도와 주셔서 감사합니다 :) – eggsy84