【问题标题】:Mongodb - combine data from two collectionsMongodb - 组合来自两个集合的数据
【发布时间】:2013-04-26 13:51:00
【问题描述】:

我知道这里已经涵盖了很多内容,但是,我对 MongoDB 非常陌生,并且正在努力将我找到的答案应用于我的情况。

简而言之,我有两个集合“total_by_country_and_isrc”,这是 MapReduce 函数的输出,以及“asset_report”,其中包含“total_by_country_and_isrc”集合或 MapReduce 来自的原始原始数据集合中不存在的asset_id。

“total_by_country_and_isrc”中的数据示例如下:

{“_id”:{“custom_id”:4748532,“isrc”:“GBCEJ0100080”, “国家”:“AE”},“价值”:0 }

'asset_report' 中的数据示例如下:

{ "_id" : ObjectId("51824ef016f3edbb14ef5eae"), "资产 ID" : “A836656134476364”、“资产类型”:“Web”、“元数据来源”: “未知”、“自定义 ID”:“4748532”、“ISRC”:“”、}

我希望得到以下结果('total_by_country_and_isrc_with_asset_id'):

{ "_id" : { "资产 ID" : "A836656134476364", "custom_id" : 4748532, “isrc”:“GBCEJ0100080”,“国家”:“AE”},“值”:0 }

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

谁能在这里提供一些指导?

【问题讨论】:

  • 不幸的是,你不能像那样“加入”两个集合。 MapReduce 仅对单个集合(和单个文档)进行操作。您可能需要存储更多非规范化的数据才能使 MapReduce 正常工作。
  • 是的,我意识到您不能像在关系数据库中那样进行连接,但我看到一些示例似乎可以推断出 MapReduce 是可能的。不过感谢非规范化提示,我会调查一下。
  • 您是否有指向您可以提供的示例的链接?也许我错过了你正在尝试做的事情。您可能可以执行两个 MapReduce 并将/out 合并到同一个集合中(这是一些尝试)。类似:stackoverflow.com/questions/9696940/… 我没有很好地按照你的例子说明这是否可行。

标签: mongodb mapreduce


【解决方案1】:

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

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

接下来,映射并缩减您的原始集合,以使用正确的键创建 total_by_country_and_isrc。

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

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 2016-12-13
    • 1970-01-01
    • 2015-07-22
    • 2022-01-09
    相关资源
    最近更新 更多