我正在尝试为MongoDB系统开发通用报告引擎,该引擎将聚合来自一组文档的信息。我不会在查询运行之前知道文档的结构。
e.g。一组文档可能如下所示:
{"drink": "Tea","accompaniments": ["Biscuits","Crisps"]}
{"drink": "Tea","accompaniments": ["Biscuits"]}
{"drink": "Coffee","accompaniments": ["Biscuits","Crisps"]}
{"drink": "Coffee","accompaniments": ["Nuts","Biscuits"]}
{"drink": "Beer","accompaniments": ["Nuts","Crisps"]}
{"drink": "Beer","accompaniments": ["Nuts"]}
{"drink": "Beer","accompaniments": ["Crisps"]}
在这里,我需要以下结果:
{drink:{Tea:2,Coffee:2,Beer:3},accompaniments:{biscuits:4,Crisps:4,Nuts:3}}
另一个文档集可能如下所示:
{"favcolor": "Red","shapes": ["Square","Circle"]}
{"favcolor": "Red","shapes": ["Square"]}
{"favcolor": "Green","shapes": ["Circle"]}
可能有许多不同的文档格式。
所以,我不能用命名键'硬编码'map-reduce函数。另外,请注意我需要从嵌套数组和/或文档中获取信息 - 我控制文档的构建方式,因此,使用一个示例,如果需要,我可以使伴奏数组成为一组适当的嵌套文档(在这个例子中,它们是从多选复选框构建的)。
从每组文档中获取所有统计信息的最有效map-reduce功能是什么?我真的希望会有'one'map-reduce,它能够从每一组中获取数据。非常感谢。
答案 0 :(得分:0)
我不确定我的概念,这只是一个想法。
您的两个示例数据集具有共同的结构。两者都包含具有属性的文档:一个具有字符串值,第二个是数组。因此,map-reduce应迭代文档属性并检查特定属性的类型。然后根据类型和属性名称进行聚合。