2012-02-08 25 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磁带采取。

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

回答

8

你总是需要给一定范围的密钥,因为过滤在map的成绩完成,reduce

例如,下面的参数应该工作(如果正确的URL编码):

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

你可以阅读有关view collation了解它是如何工作的。

+0

是的工作,现在更有意义。感谢您的链接到ViewCollat​​ion指南。 – eggsy84 2012-02-08 20:44:00

+1

我假设它是从Reduce阶段的结果完成的,但现在明白它是从Map函数的结果完成的。谢谢您的帮助 :) – eggsy84 2012-02-08 20:50:05