mongodb 5、map-reduce机制

mongodb的map-reduce机制
1 含义: map-reduce:将大量工作分解(map)执行,将结果合并(reduce)
2 语法: 
db.collection.mapReduce(
    function() {emit(key, value);}, //map函数
    function(key, values) { return reduceFunction}, //reduce函数
    {
        out: colletion,
        query: document,
        sort: document,
        limit: number
    }
)
map函数调用emit(key, value)遍历collection将key和value传递给reduce函数处理
map函数调用emit(key, value)返回键值对
map: 映射函数(生成键值对序列,作为reduce函数参数)
reduce: 统计函数,将key-value键值对变成key-value,本质就是用key分组,得到values,将values按照某种聚合
    方法进行聚合,生成最终结果
out:    统计结果存放集合(不指定则使用临时,客户端断开后自动删除)
query:    筛选条件,满足条件的文档才会调用map函数
sort:    排序参数,发给map函数前给文档排序
limit:    发往map函数的文档数量上限

3 实际操作
use mydb;
db.orders.insert({'cust_id': 'A123', 'amount': 250, 'status': "A"});
db.orders.insert({'cust_id': 'B212', 'amount': 200, 'status': "A"});
db.orders.insert({'cust_id': 'A123', 'amount': 300, 'status': "D"});

db.orders.mapReduce(
    function() {emit(this.cust_id, this.amount);},
    function(key, values) {return Array.sum( values )},
    {
        query: { status: "A" },
        out: "order_totals"
    }
)

db.orders.mapReduce( function() {emit(this.cust_id, this.amount);}, function(key, values) {return Array.sum( values )}, { query: { status: "A" }, out: "order_totals" } )


输出:
{
    "result" : "order_totals",
    "timeMillis" : 182,
    "counts" : {
        "input" : 3,
        "emit" : 3,
        "reduce" : 1,
        "output" : 2
    },
    "ok" : 1
}

查看临时输出结果集合
> show collections;
order_totals
orders
test_set
> db.order_totals.find()
{ "_id" : "A123", "value" : 750 }
{ "_id" : "B212", "value" : 200 }

转裁自
[1] http://www.runoob.com/mongodb/mongodb-map-reduce.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值