【问题标题】:Aggregation the data from mongodb, map reduce or any other ways?聚合来自 mongodb、map reduce 或任何其他方式的数据?
【发布时间】:2012-04-26 08:25:13
【问题描述】:

嗯,我正在努力解决聚合问题。我认为解决问题的最简单方法是使用 map reduce 或进行单独的查找查询,然后使用异步库帮助进行循环。

架构在这里:

db.keyword
keyword: String
start: Date
source: String(Only one of these (‘google’,’yahoo’,’bing’,’duckduckgo’) )
job: ref db.job
results: [
    {
            title: String
            url: String
            position: Number
    }
]


db.job
name: String
keywords: [ String ]
urls: [ String ]
sources: [ String(‘google’,’yahoo’,’bing’,’duckduckgo’) ]

现在我需要把数据带到这个表格:

data = {
    categories: [ 'keyword1', 'keyword2', 'keyword3' ],
    series: [
        {
            name: 'google',
            data: [33, 43, 22]
        },
        {
            name: 'yahoo',
            data: [12, 5, 3]
        }

    ]
}

最大的问题是 series[0].data 数组是由很难找到的,将 db.job.urls 与 db.keyword.results.url 匹配,然后得到位置。 有什么方法可以简化query_?我浏览了许多 map reduce 示例,但我找不到正确的方法来映射哪些数据以及减少哪些数据。

【问题讨论】:

  • 我不明白你想把它带到哪个表格。输出中的“数据”数组是什么?您是否试图将所有关键字的所有结果放入一个文档中?无论如何,您不能跨多个集合执行 MapReduce。
  • 很高兴知道,函数范围呢,我可以访问 map 和 reduce 函数中的外部变量吗?
  • 仅由“范围”参数传入。

标签: javascript node.js mongodb


【解决方案1】:

您似乎正在尝试合并来自两个单独集合(关键字和作业)的数据。

Map Reduce 以及新的聚合框架一次只能对一个集合进行操作。

您最好的选择可能是分别查询每个集合并以编程方式组合结果,以最适合您的应用程序的形式保存它们。

如果您想尝试使用 Map Reduce,这里是一个用户撰写的博客文章链接,该用户使用增量 Map Reduce 操作合并来自两个集合的值。
http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/

有关在 MongoDB 中使用 Map Reduce 的更多信息,请参阅 Mongo 文档: http://www.mongodb.org/display/DOCS/MapReduce (关于增量 Map Reduce 的部分在这里:http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce

MongoDB Cookbook 中有一些额外的 Map Reduce 示例: http://cookbook.mongodb.org/

有关如何运行 Map Reduce 操作的分步演练,请参阅 MongoDB 食谱“使用版本化文档查找最大值和最小值”http://cookbook.mongodb.org/patterns/finding_max_and_min/

的“附加”部分

希望以上内容可以为您提供一些关于如何实现所需结果的想法。正如我所提到的,我相信最直接的解决方案就是以编程方式组合结果。但是,如果您成功编写了执行此操作的 Map Reduce 操作,请发布您的解决方案,以便社区可以从您的经验中受益。

【讨论】:

  • 感谢您解释答案,正如您已经说过的一种解决方案是以编程方式将数据放在一起。这引发了另一个问题,例如对数据库的异步查询,这不会使数据组合变得容易(对于代码流控制,我将使用异步)。
  • jurka,用于 nodejs 的 jQuery Deferred 使得一堆异步调用非常易于管理。 techishard.wordpress.com/2012/05/29/…
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2020-07-17
相关资源
最近更新 更多