主要是两个方法,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);