couchdb - Map Reduce - 如何在 Reduce 函数中加入不同的文档和组结果
Posted
技术标签:
【中文标题】couchdb - Map Reduce - 如何在 Reduce 函数中加入不同的文档和组结果【英文标题】:couchdb - Map Reduce - How to Join different documents and group results within a Reduce Function 【发布时间】:2013-04-23 18:05:03 【问题描述】:我正在努力实现一个连接两个文档并将结果与 reduce 相加的 map/reduce 函数。
第一个文档类型是类别。每个类别都有一个 ID,在属性中我存储了一个详细类别、一个主要类别和一个部门(“Bereich”)。
"_id": "a124",
"_rev": "8-089da95f148b446bd3b33a3182de709f",
"detCat": "Life_Ausgehen",
"mainCat": "COL_LEBEN",
"mainBereich": "COL",
"type": "Cash",
"dtCAT": true
第二种文档类型是交易。属性显示每笔交易的所有详细信息,包括引用类别 ID 的字段“newCat”。
"_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】:我了解,多个 Category 文档可能具有相同的 mainCat
值。称为视图排序的技术适用于在关系模型中使用单连接的某些情况。在您的情况下,这将无济于事:尽管您使用两个文档方案,但您确实具有三层结构:主类别
通过将mainCat
值也存储在交易文档中来复制数据会有所帮助。我建议对交易使用有意义的 ID 而不是生成的 ID。例如,您可以考虑"COL_LEBEN-7568a6de86e5e"
(将mainCat
与一些随机值连接,其中-
分隔符永远不会出现在mainCat
中)。然后,使用 map 函数中的简单解析器,为事务发出 ["COL_LEBEN", "7568a6de86e5e"]
,为类别发出 ["COL_LEBEN"]
,然后通过 reduce 得到总和。
【讨论】:
以上是关于couchdb - Map Reduce - 如何在 Reduce 函数中加入不同的文档和组结果的主要内容,如果未能解决你的问题,请参考以下文章