如何在MapReduce函数中查询并使用其它集合的数据

蓝色_冰点 2013-09-02 12:04:08
常用在统计的场景中,例如有两个集合“产品分类”和“产品清单”
分类和清单是一对多关系,当我想通过MapReduce对产品清单进行统计的时候,需要针对分类的属性进行分组,也就是说这时需要查询分类的信息,这种情况如何实现?
类似这样的SQL语句:
select pt.main_type,count(*) prod_num
from prod_type pt inner join prod_list pl on pt.type_id=pl.type_id
group by main_type

我试过,直接在map函数中使用db.xxx.find() 查询失败,提示db未定义
或者用DBRef在map中fetch,也会失败,也是提示db未定义

求高手支个招
...全文
281 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
East271536394 2013-09-16
  • 打赏
  • 举报
回复
给你一个建议: 最好不要使用mongodb 的mapreduce,mapreduce 在数据量大的时候,经常出现问题(速度慢).
QuickPai 2013-09-04
  • 打赏
  • 举报
回复
同意楼上说的,如果你硬要在这2个collections中做mapreduce,那只能分两步: 1.单独对“产品清单”集合做MapReduce,得到结果“pt.type_id, count(*) as prod_num”; 2.根据上面结果中的type_id在到集合“产品分类”中分别查询“pt.main_type”。
QuickPai 2013-09-04
  • 打赏
  • 举报
回复
你要搞清楚关系型数据库和文档姓数据库的优缺点,然后再来看看自己的设计。 像MongoDB这样的NoSql数据库本来就是不适合关联的,你却一定要利用它的缺点,这样肯定适得其反的效果,MongoDB也明确说了不支持join操作,如果要实现这个要用内嵌文档(nested document),所以你先看看你的集合设计是否合理,然后再利用它的优势做一些东西。 你可以到它的官方文档去看看,这个对你帮助会非常大,http://docs.mongodb.org/manual/data-modeling/
蓝色_冰点 2013-09-04
  • 打赏
  • 举报
回复
这样做,是否意味着会存在大量的数据冗余?而且这种冗余是必须的?
ai_li7758521 2013-09-03
  • 打赏
  • 举报
回复
出现这种问题就需要审视集合设计是否合理。 MongoDB不支持连接查询,一种建议的做法是将两个表中数据集成到一个集合中,使用嵌套文档。

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧