Skip to content

Instantly share code, notes, and snippets.

@nassor
Created January 6, 2011 02:03
Show Gist options
  • Save nassor/767389 to your computer and use it in GitHub Desktop.
Save nassor/767389 to your computer and use it in GitHub Desktop.
// USUARIO SEG -------------------------------------------------------------------------------------------------------
var map = function() {
var time = this.acesso.getTime()
emit({pessoa:this.pessoa, pessoa_id:this.pessoa_id, acao:this.acao, time: time,
ano:this.acesso.getFullYear(), mes:this.acesso.getMonth(), dia:this.acesso.getDate()}, 1)
}
var reduce = function(key, values) {
var r = { acessos: 0, acessos_usuarios: new Array(), acessos_referencias: new Array()};
values.forEach(function(x) {
r.acessos += 1
if (x.acesso_usuario != null) {r.acessos_usuarios.push(x.acesso_usuario)}
if (x.acesso_referencia != null) {r.acessos_referencias.push(x.acesso_referencia)}
})
return r;
}
db.usuario.mapReduce(map, reduce, {out: 'log_usuario_seg', query: {acesso: {$gte: new Date(2010,0,1), $lt: new Date(2010,1,1)}} })
// Teste SEGUNDOS -----------------------------------------
var r = db.log_usuario_seg.find({'_id.pessoa':0, '_id.pessoa_id': 32868, '_id.acao': 0, '_id.ano': 2010, '_id.mes':0})
var c = 0;
r.forEach(function(x){ c += x.value.acessos; })
c // (o resultado tem q ser 284)
// Prova Real
db.usuario.count({acesso: {$gte: new Date(2010,0,1), $lte: new Date(2010,1,1)}, pessoa:0, pessoa_id: 32868, acao: 0 })
// POSTGRES: SELECT COUNT(*) FROM "log" WHERE tipo = 2 AND item_clicado = 32868 AND data_criacao between '2010-01-1' AND '2010-02-01';
// DIARIO -------------------------------------------------------------------------------------------------------
var map = function() {
emit({ano: this._id.ano, mes: this._id.mes, dia: this._id.dia, pessoa:this._id.pessoa, pessoa_id: this._id.pessoa_id, acao: this._id.acao },
{acessos_usuarios: this.value.acessos_usuarios, acessos_referencias: this.value.acessos_referencias, acessos: this.value.acessos })
}
var reduce = function(key, values) {
var r = { acessos: 0, acessos_usuarios: new Array(), acessos_referencias: new Array()};
values.forEach(function(x) {
r.acessos += x.acessos
x.acessos_usuarios.forEach(function(acesso) { r.acessos_usuarios.push(acesso) })
x.acessos_referencias.forEach(function(acesso) { r.acessos_referencias.push(acesso) })
})
return r;
}
db.log_usuario_seg.mapReduce(map, reduce, {out: 'log_usuario_dia'})
// Teste DIA -----------------------------------------
var r = db.log_usuario_dia.find({'_id.pessoa':0, '_id.pessoa_id': 32868, '_id.acao': 0, '_id.ano': 2010, '_id.mes':0})
var c = 0;
r.forEach(function(x){ c += x.value.acessos; })
c // (o resultado tem q ser 284)
// MENSAL -------------------------------------------------------------------------------------------------------
var map = function() {
emit({ ano: this._id.ano, mes: this._id.mes , pessoa: this._id.pessoa, pessoa_id: this._id.pessoa_id, acao: this._id.acao },
{acessos_usuarios: this.value.acessos_usuarios, acessos_referencias: this.value.acessos_referencias, acessos: this.value.acessos })
}
var reduce = function(key, values) {
var r = { acessos: 0, acessos_usuarios: new Array(), acessos_referencias: new Array()};
values.forEach(function(x) {
r.acessos += x.acessos
x.acessos_usuarios.forEach(function(acesso) { r.acessos_usuarios.push(acesso) })
x.acessos_referencias.forEach(function(acesso) { r.acessos_referencias.push(acesso) })
})
return r;
}
db.log_usuario_dia.mapReduce(map, reduce, {out: 'log_usuario_mes'})
// Teste:
db.log_usuario_mes.find({'_id.pessoa':0, '_id.pessoa_id': 32868, '_id.acao': 0, '_id.ano': 2010, '_id.mes':0})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment