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

abc*_*bar 3 mongodb pymongo

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

Gat*_* VP 6

如果你在本地尝试它,它将工作.但是,这在分片场景中完全失败,因为集合或集合中的数据不是分片的本地数据.

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

如果你遇到这个问题,你有几个optiosn:

  1. 对数据进行非规范化:如果map在集合中A需要x,y,z来自集合的字段B,则将这些字段复制到A.是的,它没有规范化,但MongoDB不是关系型数据库,它不打算规范化.
  2. 多部分M/R:在许多情况下,您可以通过执行一些不同的操作并将结果写入单个集合来完成相同的结果.因此,您可能首先进行M/R A,然后循环输出并使用B单独的脚本/流程中的数据进行更新.

我见过两种选择.我甚至看到#2转换成一个简单的for循环,同时处理这两个部分.我用简单的for循环和upsert 成功地替换了一些M/R作业.