我正在努力解决聚合问题。我认为解决问题最简单的方法是使用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]
}
]
}
最大的问题是系列[0] .data数组是由非常困难的查找组成的,将db.job.urls与db.keyword.results.url匹配,然后获取位置。 有没有办法简化query_?我已经浏览了许多地图缩减示例,但我找不到正确的方法来映射哪些数据以及减少哪些数据。
答案 0 :(得分:2)
看起来您正在尝试合并来自两个单独集合(关键字和作业)的数据。
Map Reduce以及新的Aggregation Framework一次只能在一个集合上运行。
您最好的选择可能是单独查询每个集合并以编程方式组合结果,以最适合您的应用程序的形式保存它们。
如果您想尝试使用Map Reduce,可以使用增量Map Reduce操作来组合来自两个集合的值的用户编写的博客文章链接。
http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/
有关将Map Reduce与MongoDB一起使用的更多信息,请参阅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 Cookbook配方的“Extras”部分“使用版本化文档查找最大值和最小值”http://cookbook.mongodb.org/patterns/finding_max_and_min/
希望上面的内容能为您提供一些如何实现理想结果的建议。正如我所提到的,我认为最简单的解决方案就是以编程方式组合结果。但是,如果您成功编写了执行此操作的Map Reduce操作,请发布您的解决方案,以便社区可以获得您的体验。