2011-06-03 20 views

回答

7

您必須在對象中保留「鍵」的列表,並將計數計算爲不同鍵的計數;這可以在MongoDb的map/reduce的finalize方法中完成。

喜歡的東西(未經測試):

var mapFn = function() { 
    emit(this.t_hour, { ips: [this.ip], areas: [this.area]); 
}; 

var reduceFn = function(key, values) { 
    var ret = { ips: {}, areas: {} }; 
    // objects used as "sets" 
    var ips = {}; 
    var areas = {}; 

    values.forEach(function(value) { 
    value.ips.forEach(function(ip) { 
     if (!ips[ip]) { 
     ips[ip] = true; // mark as seen 
     ret.ips.push(ip); 
     } 
    }); 
    value.areas.forEach(function(area) { 
     if (!areas[area]) { 
     areas[area] = true; // mark as seen 
     ret.areas.push(area); 
     } 
    }); 
    }); 
}; 

var finalizeFn = function(key, value) { 
    return { ips: value.ips.length; areas: value.areas.length }; 
}