如何进行mysql查询
按t小时从“访问日志”组中选择计数(非重复IP)、计数(非重复区域)
在没有multi-mapredut的MongoDB中?
最佳答案
您必须在对象中保留“键”列表,并将您的计数计算为不同键的计数;这可以在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 };
}
关于mongodb - 如何在mongodb中做出明显的分组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6222811/