MongoDB MapReduce
在 MongoDB 中我们可以使用 mapReduce 令来执行 mapReduce 操作。
mapReduce 令
在 mapReduce 令中要实现两个函数,分别是 map 函数和 reduce 函数,其中 map 函数调用 emit(key, value),遍历中的所有记录,并将 key 与 value 传递给 reduce 函数进行处理,如下所示:参数说明如下:> db.collection_name.mapReduce(
function() {emit(key, value);}, // map 函数
function(key, values) {return reduceFunction}, // reduce 函数
{
out: collection,
query: document,
sort: document,
limit: number
}
)
map 函数:一个 javascript 函数,它用一个键映射一个值并发出一个键值对;
reduce 函数:一个 javascript 函数,用于减少或分组具有相同键的所有文档;
out:指定 map-reduce 查询结果的位置;
query:指定用于选择文档的可选选择条件;
sort:指定可选的排序条件;
limit:指定要返回的文档数(可选)。
使用 mapReduce
假如有一个存储用户帖子信息的,其中存储了若干用户的用户名、状态等信息,例如下面这样:
{ > db.posts.mapReduce( ... function() { emit(this.user_name,1); }, ... function(key, values) {return Array.sum(values)}, ... { ... query:{status:"active"}, ... out:"post_total" ... } ... ) { "result" : "post_total", "timeMillis" : 48, "counts" : { "input" : 11, "emit" : 11, "reduce" : 2, "output" : 2 }, "ok" : 1 }
"post_text": "编程帮(biancheng网站站点" rel="nofollow" />
result:储存结果的 collection 的名字,这是个临时,mapReduce 的连接关闭后会被自动删除;
timeMillis:执行花费的时间,单位为毫秒;
input:满足条件被发送到 map 函数的文档个数;
emit:在 map 函数中 emit 被调用的次数,也就是所有中的数据总量;
ouput:结果中的文档个数(count 对调试非常有帮助);
ok:查询是否执行成功,成功为 1;
err:若执行失败,则会在这里显示失败原因。
通过运行结果可以发现,共有 11 个文档与查询匹配(状态为“active”),map 函数生成了 11 个具有键值对的文档, reduce 函数将具有相同键值的映射文档分为 2 个组。
若要查看 mapReduce 查询的结果,可以使用 find 方法,如下所示:
上面的查询语句,执行结果如下:> db.posts.mapReduce(
... function() { emit(this.user_name,1); },
... function(key, values) {return Array.sum(values)},
... {
... query:{status:"active"},
... out:"post_total"
... }
... ).find()
{ "_id" : "biancheng", "value" : 5 }
{ "_id" : "bianchengbang", "value" : 6 }
以类似的方式,mapReduce 查询可用于构造大型复杂的聚查询,自定义 JavaScript 函数的使用使得 mapReduce 非常灵活和强大。
- 随机文章
- 核心危机(核心危机魔石合成攻略)
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 儿童教育文章(儿童教育)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 东天目山(东天目山景区)
- 蝙蝠给人类的一封信(蝙蝠给人类的一封信)
- 大松电饭煲(美的大松电饭煲)
- 服饰加盟(服饰加盟店招商)
- 疯狂填字(疯狂填字5)
- 点对点短信息(点对点短信息费是什么意思)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 哈利波特官网(哈利波特官网在哪里)
- 骇客神条(骇客神条怎么辨别真假)
