访问MongoDB地图中的另一个集合

时间:2012-03-08 13:56:17

标签: mongodb pymongo

我想从map函数访问另一个集合,这样我就可以对密钥进行查找并执行一些聚合。我可以使用db.collection_name或BSON代码中的类似内容访问任何集合吗?

2 个答案:

答案 0 :(得分:6)

如果你在本地试试,它会起作用。但是,这在分片场景中完全失败,因为集合或集合中的数据不会是分片的本地数据。

这也是不好的做法,因为M / R会导致难以追踪的级联查询。

如果您遇到此问题,您可以选择一些:

  1. 对数据进行非规范化:如果集合map上的A需要来自集合x,y,z的字段B,请将这些字段复制到{{1} }}。是的,它没有正常化,但是MongoDB不是关系数据库,它不打算进行规范化。
  2. 多部分M / R :在许多情况下,您可以通过执行一些不同的操作并将结果写入单个集合来完成相同的结果。因此,您可能首先在A上进行M / R,然后循环输出并使用A中的数据在单独的脚本/流程中进行更新。
  3. 我看过两种选择。我甚至看到#2转换为一个简单的B循环,同时处理这两个部分。我已经用简单的for循环和upserts成功替换了一些M / R作业。

答案 1 :(得分:2)

这是不可能的,因为它会在分片设置中中断。 Map / reduce只能使用他们调用的集合。