我想知道mongodb 中聚合管道和映射减少之间的区别
聚合管道:
- 预定义运算符的管道
- 当使用分片时,一些运算符($match,$project)可以并行执行
- 非常快
- 您可以迭代输出,或者使用$out运算符将其存储到集合中
- 易于开发和调试:从一个操作符开始,查看输出,继续使用下一个操作符,依此类推
- 面向集合:对于整个集合,执行管道中的第一个运算符。输出是一个集合。对于该集合,执行第二个运算符,依此类推
MapReduce:
- 用户自定义映射和reduce函数;用JavaScript编写
- 你可以在其中编码"任何东西"(请不要访问map和reduce中的数据库!)
- 使用分片时,map和reduce函数并行执行
- reduce输出将被写入一个分片集合(shard-key为id)
- 当您使用mapReduce方法时,例如在Java客户端API中,您可以对结果进行迭代。但即便如此,map和reduce也是JavaScript函数(作为字符串),而不是Java函数
- 面向文档:对于集合中的每个文档,调用map函数。完成后,对于map函数调用中发出的每个不同键,调用reduce函数,并将值列表作为第二个参数。reduce函数的输出是一个文档
建议使用聚合管道,而不是MapReduce。它快速、强大,而且MongoDB优化查询的可能性更大。如果您需要编写自己的代码(例如,字符串操作、生成随机数、字数等),那么编写MapReduce作业会更容易。