2011-12-29 1 views
1

I가 다음 쿼리 :어려운 CouchDB를 쿼리

view.reduce.group_level(5).keys 

반환

[["1f9c79a33f399a7937d880c5f31e8dbc", 2011, 12, 29, 13], ["1f9c79a33f399a7937d880c5f31e8dbc", 2011, 12, 29, 14], ["c38332ffc275b6c70bcf06ffc39ddbdd", 2011, 12, 29, 13], ["c38332ffc275b6c70bcf06ffc39ddbdd", 2011, 12, 29, 14]] 

첫 번째 키는 ID이고 다른 키를 년, 월, 일이며, 시간

2010 년과 2013 년 사이에 모든 행이 필요합니다. 따라서 첫 번째 키는 무시하고 싶습니다.

문제는 결과를 얻으려면 첫 번째 매개 변수를 설정해야하지만 모든 키에 대한 모든 결과를 얻고 싶습니다. 예를 들어

: view.reduce.group_level(5).startkey(["every_possible_key", 2010]).endkey(['every_possible_key", 2013, {}])

나는 아무것도 얻지 못할 것보다 첫 번째 키를 비워두면. 내가 "\ u9999"라고 말하면 모든 것을 얻고 두 번째 키는 무시합니다.

누군가 내가 뭘 잘못하고 있는지 알고 있습니까?

고마워요.

지도 :

function(d) { 
    if (d['type'] == 'State' && d['driver_id'] && d['name'] && d['created_at']) { 
     var dt = new Date(d.created_at); 
     emit([d.driver_id, dt.getFullYear(), dt.getMonth() + 1, dt.getDate(), dt.getHours()], d.name); 
    } 
    } 

감소 :

function(k,v,r) { 
    var result = { 
     'hire': 0, 'hired': 0, 'arrived': 0, 'pick up': 0, 'drop off': 0, 
     'missed': 0, 'rider cancel': 0, 'driver cancel': 0, 'no show': 0, 
     'avail': 0, 'unavail': 0, 'other': 0 
    }; 
    if (r) { 
     var row = null; 
     for (i in v) { 
     row = v[i]; 
     for (j in row) { 
      result[j] += row[j]; 
     } 
     } 
    } else { 
     for (i in v) { 
     if (result[v[i]] != null) { 
      result[v[i]] += 1; 
     } else { 
      result['other'] += 1; 
     } 
     } 
    } 

    return result; 
    } 

답변

1

당신이 "잘못하고"있는 것은 당신이보기의 첫 번째 키로 쿼리에 필요하지 않은 키를 사용하는 것입니다 .

다른 검색어로 필요하면 다른보기를 만듭니다.

+0

하지만이 ID로 그룹화하고 싶습니다. 결과에 더 많은 ID를 넣기 만하면됩니다. –

+0

CouchDB가 업데이트되지 않은 경우 짧은 대답은 여러 범위를 가질 수 없다는 것입니다. 그럼에도 불구하고 대안을 구현하는 다른 방법이 있습니다 ("ID"를 마지막 키로 쉽게 넣을 수 있음). http://stackoverflow.com/questions/1991598/problem-with-two-key-ranges-in-couchdb를 보거나 CouchDB 사용자 목록에 질문하십시오. –

+0

감사합니다. Couchdb만으로는 불가능합니다. 검색 엔진으로 다른 솔루션을 찾아야합니다. 감사! –