2013-04-23 62 views
1

我很努力实现一个map/reduce函数,它将两个文档连接起来并将结果与​​reduce进行求和。couchdb - Map Reduce - 如何在Reduce函数中加入不同的文档和分组结果

第一个文档类型是类别。每个类别都有一个ID,在属性中我存储了一个详细类别,一个主类别和一个分类(“Bereich”)。

{ 
    "_id": "a124", 
    "_rev": "8-089da95f148b446bd3b33a3182de709f", 
    "detCat": "Life_Ausgehen", 
    "mainCat": "COL_LEBEN", 
    "mainBereich": "COL", 
    "type": "Cash", 
    "dtCAT": true 
} 

第二个文档类型是一个事务。属性显示每个事务的所有细节,包括字段“newCat”,它是对类别ID的引用。

{ 
    "_id": "7568a6de86e5e7c6de0535d025069084", 
    "_rev": "2-501cd4eaf5f4dc56e906ea9f7ac05865", 
    "Value": 133.23, 
    "Sender": "Comtech", 
    "Booking Date": "11.02.2013", 
    "Detail": "Oki Drucker", 
    "newCat": "a124", 
    "dtTRA": true 
} 

现在,如果我要开发一个地图/减少得到的结果形式:

例如为:“主要类别名称”,“在交易的所有值的总和”。

我想通过“_ID:”和?include_docs = true引用另一个文档,但在这种情况下,我不能使用reduce函数。

我在这里看过其他帖子,但找不到合适的例子。

如果有人有一个想法如何解决这个问题会很好。

回答

2

据我所知,多个分类文档可能具有相同的mainCat值。这种称为视图归类的技术适用于在关系模型中使用单一连接的情况。在你的情况下,它不会帮助:虽然你使用两个文档方案,你真的有三个级别的结构:主类别< - 类别< - 交易。我认为你应该考虑改变DB设计。

复制数据,通过在交易文档中存储mainCat值也会有所帮助。我建议为交易使用有意义的ID,而不是生成一个。你可以考虑例如"COL_LEBEN-7568a6de86e5e"(连接mainCat与一些随机值,其中-定界符从来不存在于mainCat)。然后,使用地图函数中的简单解析器,您可以发送交易["COL_LEBEN", "7568a6de86e5e"],发送类别["COL_LEBEN"],然后减少以获得总和。