2011-12-29 47 views
1

我有以下查詢:難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。 – 2011-12-29 14:23:30

+0

如果CouchDB沒有更新,簡短的答案是你*不能*有多個範圍。儘管如此,實現解決方法的方法也不盡相同(最簡單的方法就是將「ID」作爲最後一個鍵)。請參閱http://stackoverflow.com/questions/1991598/problem-with-two-key-ranges-in-couchdb或向CouchDB用戶列表提出您的問題。 – 2011-12-29 15:00:02

+0

好的,謝謝!只是不可能只用Couchdb。必須用搜索引擎找到另一個解決方案。謝謝! – 2012-02-13 16:26:25