mongodb mapreduce

2015-09-27  本文已影响0人  dayuoba

主要是两个方法,map和reduce方法。
一个简单的示例

//定义map方法
var map = function() {};
//定义reduce方法
var reduce = function(key, values) {};
//定义callback
var callback = function(err, collection) {};
db.collection.mapReduce(map, reduce, {out:{},query:{}}, callback);
map方法
var map = function() {
    //书写要归档或者说映射的键和值
    //this指向一个文档对象
    emit(key, value)
}
//例如
//数据库有如下数据
{
   name: 'yuyang',
   age: 20
}
{
   name: 'yuyang',
   age: '30'
}

{
    name: 'dayu',
    age: 27
}
//看map函数是如何归档的
var map = function() {
    emit(this.name, this.age);
}
归档后的数据如下
{
    'yuyang': [20, 30],
    'dayu': [27]
}
//这就是map函数的作用通过emit(key, value),可以以key为新的key,把value集合成values给新的key。就像上面一样.
reduce方法
//继续使用归档后的数据做reduce
var reduce = function(key, values) {
     //redcue方法相当于对归档后的数据做一个遍历调用我们可以拿到每个key和对应的values.最终函数的返回值 会 绑定到key上面
    var age = 0;
    values.forEach(function(value) {
        age += value;
    });
     return age;
}; 
//reduce后的数据结构
{
  'yuyang': 50,
  'dayu': 27
}
//最终这个reduce后的数据或者说文档会放到一个collection中兵调用我们的callback函数

function callback(err, collection) {
    //我们最终要对map reduce后的数据的处理
    collection.find().toArray(function(err, results) {
        console.log(err || results);
    });
}


//到这基本就结束了 ,在回到接口api,重新看一下.
db.collection.mapReduce(map, reduce, {
    out: {
                //mapreduce 后数据写入的集合
        replace : 'tempCollection', 
        readPreference : 'secondary'
    },
        //mapreduce 前 我们对文档的query
    query: {
        date:{$gte: new Date('2015-07-07 00:00:00')}
    }
}, callback);
上一篇 下一篇

猜你喜欢

热点阅读