UNPKG

reactive-superglue

Version:

Stream-based middleware for I/O integration of sources and sinks

118 lines (104 loc) 3.96 kB
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.