reactive-superglue
Version:
Stream-based middleware for I/O integration of sources and sinks
118 lines (104 loc) • 3.96 kB
JavaScript
var _ = require("../")
var ISODate = require("mongodb").MongoClient
var db = _.mongodb("mongodb://mongodb01.weplan-app.com/weplan_partis")
var aggregate_fields = function (fields, object) {
fields.forEach(function (item) {
object[item] = {$sum: "$" + item}
})
}
/*{
$dateToString: {
format: "%Y-%m-%d",
date: "$ts"
}
}*/
var query = db.collection("events")
.aggregate([
{
$match: {
ts: {$gte: new Date("2016-01-01T00:00:00Z"), $lt: new Date("2016-01-10T00:00:00Z")},
event_type: {$ne: "cell_info"},
event_type: {$ne: "call_signal_strength"},
event_type: {$ne: "call_data_connection_strength"},
event_type: {$ne: "internet_data_last_boot"}
}
},
{
$group: {
_id: {
rlp: "$id_rel_line_plan",
date: {
day: {$dayOfMonth: "$ts"},
month: {$month: "$ts"},
year: {$year: "$ts"}
},
app_package: "$app_package",
},
time_usage: {$sum: "$time_usage"},
launches: {$sum: "$launches"},
wifi_bytes_sent: {$sum: "$wifi_bytes_sent"},
wifi_bytes_received: {$sum: "$wifi_bytes_received"},
mobile_bytes_sent: {$sum: "$mobile_bytes_sent"},
mobile_bytes_received: {$sum: "$mobile_bytes_received"},
roaming_bytes_sent: {$sum: "$roaming_bytes_sent"},
roaming_bytes_received: {$sum: "$roaming_bytes_received"},
duration_billing: {$sum: "$duration_billing"},
duration_real: {$sum: "$duration_real"},
wifi_bytes_in: {$sum: "$wifi_bytes_in"},
wifi_bytes_out: {$sum: "$wifi_bytes_out"},
bytes_in: {$sum: "$bytes_in"},
bytes_out: {$sum: "$bytes_out"},
mobile_bytes:{$sum: "$mobile_bytes"},
wifi_bytes:{$sum: "$wifi_bytes"},
duration: {$sum: "$duration"}
}
}
,
{$out: "report_2016q01m01"}
]
, {allowDiskUse: true})
query.observe().done(function () {
console.log("finished query")
db.close()
})
var old_group= {
$group: {
_id: {
rlp: "$_id.rlp",
app: "$_id.app_package",
date: {month: {$month: "$_id.date"}}},
wifi_bytes_sent: {$sum: "$wifi_bytes_sent"},
wifi_bytes_received: {$sum: "$wifi_bytes_received"},
mobile_bytes_sent: {$sum: "$mobile_bytes_sent"},
mobile_bytes_received: {$sum: "$mobile_bytes_received"},
roaming_bytes_sent: {$sum: "$roaming_bytes_sent"},
roaming_bytes_received: {$sum: "$roaming_bytes_received"},
time_usage: {$sum: "$time_usage"},
launches: {$sum: "$launches"},
duration_billing: {$sum: "$duration_billing"},
duration_real: {$sum: "$duration_real"},
counts_minimum_consumption: {$sum: "$counts_minimum_consumption"},
counts_limit: {$sum: "$counts_limit"},
}
}
query.observe().map(()=>1).scan(0,_.add).each(function(count){
console.log("counter:", count)
})
query.to_json().pipe(process.stdout)
/*
{$lookup: {}}, //rlp
{$unwind: "$rlp"}
db.collection("events")
.aggregate([
{$match: {event_type: "`call`"}},
{$group: {_id: "id_rel_line_plan", events: {$push: "$CURRENT"}}},
{$lookup: {}}, //rlp
{$unwind: "$rlp"}
], {allowDiskUse: true})
.map(function (event) {
})
*/
//QUERY AGGREGATE Mundo real:
//Paso 1: agrupar por rlp-dia => conteo => 365 * 50K = 180 *100K = 18M. Le añadimos el mes y el año para sacar
//groupings cómodos.
//Paso 2: agrupar por ventana mensual se hace por groupings. Permite sacar TTM, trimestres móviles, etc.