Created
March 18, 2018 13:50
-
-
Save sseidenthal/a2d5215f51ae71a70d032fb7eebcbc85 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var national = ["Join", "mobilePOST", "Tango GSM", "National", "SMSPremium"]; | |
| var voicemail = ["IVR", "Tango VM", "mobPOST VM"]; | |
| /* ============================================================================================================================================ */ | |
| var match = { $match : | |
| {"SERVICE_TYPE" : {"$in" : [1,2,3,4] } } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var lookup_billing_cycles = { $lookup: | |
| { from: "BILLING_CYCLE", localField: "BILLING_CYCLE_ID", foreignField: "BILLING_CYCLE_ID", as: "_BILLING_CYCLE" } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var lookup_charge_codes = { $lookup: | |
| { from: "ACCT_ITEM_TYPE", localField: "ACCT_ITEM_TYPE_ID1", foreignField: "ACCT_ITEM_TYPE_ID", as: "_ACCT_ITEM_TYPE" } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| //FROM COUNTRY | |
| //zone_map_name: EVENT_EXTEND_PROPERTY9, | |
| //zone_code : EX_PROPERTY5 | |
| var lookup_from_zones = { $lookup: | |
| { from: "ZONES", | |
| let: { | |
| zone_map_name: "$EVENT_EXTEND_PROPERTY9", | |
| zone_code: "$EX_PROPERTY5" | |
| }, | |
| pipeline: [ | |
| { $match: | |
| { $expr: | |
| { $and: [ | |
| { $eq: [ "$ZONEMAP_NAME", "$$zone_map_name" ] }, | |
| { $eq: [ "$ZONE_CODE", "$$zone_code"] } | |
| ] | |
| } | |
| } | |
| } | |
| ], | |
| as: "FROM_ZONE" | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| //TO COUNTRY | |
| //zone_map_name: EVENT_EXTEND_PROPERTY10, | |
| //zone_code : EX_PROPERTY7 | |
| var lookup_to_zones = { $lookup: | |
| { from: "ZONES", | |
| let: { | |
| zone_map_name: "$EVENT_EXTEND_PROPERTY10", | |
| zone_code: "$EX_PROPERTY7" | |
| }, | |
| pipeline: [ | |
| { $match: | |
| { $expr: | |
| { $and: [ | |
| { $eq: [ "$ZONEMAP_NAME", "$$zone_map_name" ] }, | |
| { $eq: [ "$ZONE_CODE", "$$zone_code"] } | |
| ] | |
| } | |
| } | |
| } | |
| ], | |
| as: "TO_ZONE" | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project_from_place = { | |
| //SOURCE: EX_PROPERTY6 | |
| //DESTINATION: EX_PROPERTY8 | |
| $switch: { | |
| branches: [ | |
| {case: { $eq: ["$SERVICE_TYPE", 1]}, then: | |
| { $cond: [ {$eq: ["$EX_PROPERTY6", "mobilePOST"]}, "National", "Roaming" ] } | |
| }, | |
| {case: { $or: [ | |
| { $eq: ["$SERVICE_TYPE", 3] }, | |
| { $eq: ["$SERVICE_TYPE", 4] } | |
| ]}, then: | |
| { $cond: [ {$in: ["$EX_PROPERTY6", national] }, "National", "Roaming" ] } | |
| }, | |
| {case: {$eq: ["$SERVICE_TYPE", 2]}, then: | |
| { $cond: [ {$in: ["$EX_PROPERTY6", national] }, "National", "Roaming" ] } | |
| } | |
| ] | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project_to_place = { | |
| //SOURCE: EX_PROPERTY6 | |
| //DESTINATION: EX_PROPERTY8 | |
| $switch: { | |
| branches: [ | |
| //DATA | |
| {case: { $eq: ["$SERVICE_TYPE", 1]}, then: "APN"}, | |
| //SMS or MMS | |
| {case: { $or: [ | |
| { $eq: ["$SERVICE_TYPE", 3] }, | |
| { $eq: ["$SERVICE_TYPE", 4] }, | |
| ]}, then: | |
| { $cond: [ {$in: ["$EX_PROPERTY8", national] }, "National", "International" ] } | |
| }, | |
| //VOICE | |
| {case: { $eq: ["$SERVICE_TYPE", 2]}, then: | |
| { $cond: [ {$in: ["$EX_PROPERTY8", national] }, "National", | |
| { $cond: [ {$in: ["$EX_PROPERTY8", voicemail] }, "Voicemail", "International" ] } | |
| ] } | |
| } | |
| ] | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project_charge_amounts = { | |
| $switch: { | |
| branches : [ | |
| { case: { $eq: ["$ACCT_RES_ID1", 1] }, then : "$CHARGE1" }, | |
| { case: { $eq: ["$ACCT_RES_ID2", 1] }, then : "$CHARGE2" }, | |
| { case: { $eq: ["$ACCT_RES_ID3", 1] }, then : "$CHARGE3" }, | |
| { case: { $eq: ["$ACCT_RES_ID4", 1] }, then : "$CHARGE4" }, | |
| { case: { $eq: ["$ACCT_RES_ID5", 1] }, then : "$CHARGE5" }, | |
| { case: { $eq: ["$ACCT_RES_ID6", 1] }, then : "$CHARGE6" }, | |
| { case: { $eq: ["$ACCT_RES_ID7", 1] }, then : "$CHARGE7" }, | |
| { case: { $eq: ["$ACCT_RES_ID8", 1] }, then : "$CHARGE8" }, | |
| { case: { $eq: ["$ACCT_RES_ID9", 1] }, then : "$CHARGE9" } | |
| ], | |
| default: 0 | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project_type_com = { | |
| $switch: { | |
| branches : [ | |
| { case: { $eq: ["$SERVICE_TYPE", 1] }, then : "GPRS" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 2] }, then : "VOICE" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 3] }, then : "SMS" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 4] }, then : "MMS" } | |
| ], | |
| default: "?" | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project_type_unit = { | |
| $switch: { | |
| branches : [ | |
| { case: { $eq: ["$SERVICE_TYPE", 1] }, then : "kb" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 2] }, then : "s" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 3] }, then : "SMS" }, | |
| { case: { $eq: ["$SERVICE_TYPE", 4] }, then : "MMS" } | |
| ], | |
| default: "?" | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| var project = { $project : | |
| { | |
| "event_id": "$UNIQUE_CDR_SEQ", | |
| "from_country": {"$arrayElemAt": ["$FROM_ZONE.ISO2", 0]}, | |
| "to_country": {"$arrayElemAt": ["$TO_ZONE.ISO2", 0]}, | |
| "charge_code": {"$arrayElemAt": ["$_ACCT_ITEM_TYPE.ACCT_ITEM_TYPE_NAME", 0]}, | |
| "from_number": "$CALLING_NBR", | |
| "to_number": "$CALLED_NBR", | |
| "type_com": project_type_com, | |
| "type_unit": project_type_unit, | |
| "charge_amount": project_charge_amounts, | |
| "from_place_cat": project_from_place, | |
| "to_place_cat": project_to_place, | |
| "customer_id": "$ACCT_ID", | |
| "bar_no": "$CUST_ID", | |
| "subscriber_id": "$SUBS_ID", | |
| "from_place": "$EX_PROPERTY6", | |
| "to_place": "$EX_PROPERTY8", | |
| "cycle_year" : {"$arrayElemAt": [ { $split: [ {"$arrayElemAt": ["$_BILLING_CYCLE.START_DATE",0 ] }, "-"] }, 0 ] }, | |
| "cycle_month" : {"$arrayElemAt": [ { $split: [ {"$arrayElemAt": ["$_BILLING_CYCLE.START_DATE", 0 ] }, "-"] }, 1 ] } | |
| } | |
| }; | |
| /* ============================================================================================================================================ */ | |
| db.CDR.aggregate([ | |
| match, | |
| lookup_billing_cycles, | |
| lookup_charge_codes, | |
| lookup_from_zones, | |
| lookup_to_zones, | |
| project, | |
| { $out : "HUHUUHU" } | |
| ]); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment