在Mongodb的Mapreduce中,我认为在map函数中可以访问“db”(如db.anotherCollection.find())对象。但是这个功能已被删除(从1.6版本开始),这在加入时很难实现。是什么原因?为什么它已被删除?
答案 0 :(得分:1)
与MongoDB 2.4一样,有几个原因禁止在Map / Reduce函数中访问db
对象,包括:
死锁:在同一服务器端函数内调用数据库和/或JavaScript锁之间存在潜在的死锁情况。
性能:Map / Reduce模式多次调用reduce()
;每次迭代都是一个不同的JavaScript上下文,必须打开与数据库的新连接,并为查询结果分配额外的内存。长时间运行的JavaScript操作将阻止其他操作。
安全性:跨数据库查询需要进行适当的身份验证检查。
对于读取或写入分片群集的Map / Reduce作业,上述问题可能会更加复杂。 MongoDB Map / Reduce实现目前仅用于处理来自单个输入集合的数据,并且Map / Reduce函数中db
对象的任何历史滥用都应被视为错误而非功能。
如果要将数据与Map / Reduce合并,可以使用Incremental Map/Reduce。根据您尝试实现的结果,还有其他方法可能更简单,例如通过多个查询调整模式或在应用程序代码中进行连接。