在查看documentation map-reduce时,我发现:
注:
对于大多数聚合操作,聚合管道提供 更好的性能和更连贯的界面。但是,map-reduce 操作提供了一些目前无法提供的灵活性 聚合管道。
我对此并不了解。
答案 0 :(得分:17)
首先,MongoDB中的Map / Reduce不是用于即席查询,M / R的开销很大。由于这种开销,即使对小型数据集进行非常简单的M / R操作也可能需要数百毫秒。
在实践中,与大型数据集上的聚合框架相比,我不能说M / R的性能,但理论上,大型分片数据库上的M / R操作应该更快,因为分片可以运行操作很大程度上并行。
至于灵活性,由于M / R实际上运行javascript方法,因此您可以使用该语言的全部功能。例如,假设您想要按字段值的余弦对某些数据进行分组。由于聚合框架中既没有$cos
运算符,也没有从连续数字(类似$truncate
)构建离散桶的有意义的方法,因此聚合框架在这种情况下无济于事。
因此,简而言之,我会说用例是
out
参数并合并结果)