访问MongoDB Map Reduce中的另一个集合

3
我希望在map函数中访问另一个集合,以便我可以查找键并执行一些聚合操作。 在BSON代码中是否可以使用db.collection_name或类似的方式访问任何集合?
2个回答

6
如果您在本地尝试此方法,它将正常工作。但是,在分片的情况下,这将完全失败,因为集合或集合中的数据不会局限于分片。
这也是一种不好的做法,因为M/R可能导致级联查询,很难追踪。
如果您遇到此问题,您有几个选择:
1. 规范化数据:如果集合A上的map需要集合B中的字段x、y和z,则将这些字段复制到集合A中。是的,这不是规范化的,但MongoDB不是关系数据库,不打算规范化。 2. 多部分M/R:在许多情况下,您可以通过执行几个不同的操作并将结果写入单个集合来实现相同的结果。因此,您可能首先对A进行M/R,然后在一个单独的脚本/进程中循环输出并使用来自B的数据进行更新。
我见过两种选项都被使用。我甚至见过#2转换为处理两个部分的简单for循环。我已成功用简单的for循环和upsert替换了一些M/R作业。

请注意,即使在本地使用Mongo 2.4,访问另一个集合也不起作用;mapReduce访问其他集合的能力已被删除。请参阅发行说明 - jbyler

2

这是不可能的,因为它会在分片设置中出错。映射/减少操作只能使用调用它们的集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接