2012-12-13 95 views
0

我有一個CouchDB實例一堆文件有以下數據:CouchDB的集團BY值,日期範圍

{ 
    "_id": "[string based ID generated by CouchDB]", 
    "action": "view", 
    "group": [Integer representing a group number], 
    "date": [Javascript timestamp] 
} 

我可以通過組和動作使用下面對數據進行分組,並獲得總數每組動作:

function(doc) { 
    emit([doc.group, doc.action], [1, 1]); 
} 

(隨着減少簡單爲_sum)。

問題是,這會從所有組獲取數據,而我只想要來自單個組(例如組1)的數據。

另外,我知道我可以按照日期進行過濾,但是如何將它與上面的按日期和組ID過濾?

function(doc) { 
    var then = new Date(Date.parse(doc['Event Date'])); 
    var fatalities = 0; 
    if (doc['Total Fatal Injuries']!="") { 
     fatalities = parseInt(doc['Total Fatal Injuries']); 
    } 
    emit([then.getFullYear(), then.getMonth()], [1, fatalities]); 
} 

(從https://cloudant.com/blog/mapreduce-from-the-basics-to-the-actually-useful/

謝謝!

回答

0

我認爲你已經將地圖()和reduce()函數改正了,你只需要將reduce=true&group_level=1&startkey=[<group id>]&endkey=[<group id>.toString() + "a"]傳遞給視圖。

至於按日期過濾,您可以使用相同的策略。使用組級別,您可以看到每年和每月的總和。

+0

是的,就是這樣 - 我需要將開始和結束鍵指定爲相同的組ID,並使用endkey中的{}'指定所有其他鍵的「全部」。 –