couchdb - Map Reduce - 如何在Reduce函数中连接不同的文档和分组结果

时间:2013-04-23 18:05:03

标签: 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
}

现在,如果我想开发一个map / reduce来获得结果:

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

我发现我可以引用另一个带有“_ID:”和?include_docs = true的文档,但在这种情况下我不能使用reduce函数。

我查看了其他帖子,但找不到合适的例子。

如果有人知道如何解决这个问题会很棒。

1 个答案:

答案 0 :(得分:2)

据我所知,多个类别文档可能具有相同的mainCat值。称为视图整理的技术适用于在关系模型中使用单个连接的某些情况。在你的情况下,它没有帮助:虽然你使用两个文档方案,但你确实有三个级别的结构:main-category< - category< - transaction。我认为你应该考虑改变数据库设计。

通过在交易文档中存储mainCat值来复制数据会有所帮助。我建议使用有意义的ID来代替生成的ID。您可以考虑例如"COL_LEBEN-7568a6de86e5e"(带有一些随机值的连接mainCat-中永远不会出现mainCat分隔符。然后,使用map函数中的简单解析器,为事务发出["COL_LEBEN", "7568a6de86e5e"],为类别发出["COL_LEBEN"],为reduce得到总和。