2012-12-13 33 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中的{}'指定所有其他键的“全部”。 –