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