主要是兩個方法遍略,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方法
//繼續(xù)使用歸檔后的數據做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);