MongoDB Map Reduce
根据MongoDB的文档, Map-reduce 是一种将大量数据压缩为有用的聚合结果的数据处理范式。MongoDB使用 mapReduce 命令进行map-reduce操作。MapReduce通常用于处理大型数据集。
MapReduce命令
以下是基本mapReduce命令的语法:
map-reduce函数首先查询集合,然后将结果文档映射为键值对,然后根据具有多个值的键进行减少。
在上述语法中 –
- map 是一个javascript函数,它将一个键值与一个键相关联并发出一个键值对
-
reduce 是一个javascript函数,它减少或分组具有相同键的所有文档
-
out 指定map-reduce查询结果的位置
-
query 指定可选的选择条件以选择文档
-
sort 指定可选的排序条件
-
limit 指定可选的返回的最大文档数
使用MapReduce
考虑以下存储用户帖子的文档结构。文档存储用户的用户名称和帖子的状态。
现在,我们将在我们的 posts 集合上使用mapReduce函数,选择所有活跃的帖子,根据user_name对它们进行分组,然后使用以下代码计算每个用户的帖子数量:
上述的MapReduce查询输出以下结果 −
结果显示,总共有4个文档与查询(status:”active”)匹配,map函数发射了4个带有键值对的文档,最后reduce函数将具有相同键的映射文档分组成2个。
要查看此mapReduce查询的结果,请使用find运算符−
上述查询给出了以下结果,表明两个用户 tom 和 mark 都有两个处于活动状态的帖子。
类似地,MapReduce查询可以用来构建复杂的聚合查询。使用自定义的JavaScript函数可以充分利用灵活且强大的MapReduce功能。