Mongodb - 组合来自两个集合的数据

时间:2013-05-02 11:43:55

标签: mongodb mapreduce

我知道这里有很多内容,但是,我对MongoDB很新,并且正在努力应用我已经找到的答案。

简而言之,我有两个集合'total_by_country_and_isrc',它是MapReduce函数和'asset_report'的输出,它包含'total_by_country_and_isrc'集合中不存在的asset_id或者是MapReduced的原始数据集合。

'total_by_country_and_isrc'中的数据示例为:

  

{“_ id”:{“custom_id”:4748532,“isrc”:“GBCEJ0100080”,         “country”:“AE”},“value”:0}

'asset_report'中的数据示例是:

  

{“_ id”:ObjectId(“51824ef016f3edbb14ef5eae”),“资产ID”:   “A836656134476364”,“资产类型”:“网络”,“元数据来源”:   “未知”,“自定义ID”:“4748532”,“ISRC”:“”,}

我想以下结果('total_by_country_and_isrc_with_asset_id'):

  

{“_ id”:{“资产ID”:“A836656134476364”,“custom_id”:4748532,   “isrc”:“GBCEJ0100080”,“country”:“AE”},“value”:0}

我知道如何在关系数据库中使用,但我真的想尝试在Mongo中使用它,因为我正在处理一些非常大的集合,并认为Mongo是适合这项工作的工具。

有人可以在这里提供一些指导吗?

1 个答案:

答案 0 :(得分:0)

我认为你想使用“减少”输出动作:Output to a Collection with an Action。您需要重新生成total_by_country_and_isrc,因为它看起来不像asset_report具有生成total_by_country_and_isrc中已有密钥所需的字段 - 因此“加入”数据是不可能的。

首先,编写一个map方法,该方法能够从原始集合(用于生成total_by_country_and_isrc)以及asset_report集合生成相同的键。将这些键视为“加入”字段。

接下来,映射并缩小原始集合,使用正确的密钥创建total_by_country_and_isrc。

最后,使用与生成total_by_country_and_isrc相同的方法映射asset_report,但使用reduce函数可用于减少asset_report中此映射数据与total_by_country_and_isrc中数据的交集(按键)。