Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. def c_stats(campaign_class=["dynamic",'static','event'])
  2. # puts "Listing campaigns of type: #{campaign_class}"
  3.  
  4. campaigns_info = campaigns.in(type: campaign_class).only(:_id, :name, :type, :status )
  5. ids = campaigns_info.map { |c| c._id}
  6.  
  7. # puts "Ids: #{ids}"
  8.  
  9. pipeline = [
  10. # {"$match" => {project_id: self._id} },
  11. {"$match" => {'campaign_id' => {'$in' => ids}} },
  12. {"$project" => {
  13. campaign_id: '$campaign_id',
  14. non_opened: {"$ifNull" => [ '$action', 1 ]},
  15. opened: {"$cond" => [{"$eq" => ['$action', 0]}, 1, 0]},
  16. engaged: {"$cond" => [{"$eq" => ['$action', 1]}, 1, 0]}
  17. }},
  18. { "$group" => {
  19. _id: '$campaign_id',
  20. non_opened: {"$sum" => '$non_opened'},
  21. opened: {"$sum" => '$opened'},
  22. engaged: {"$sum" => '$engaged'}
  23. }}
  24. ]
  25.  
  26.  
  27. hashed_campaigns = Hash[campaigns_info.map { |u| [u._id, u] }]
  28.  
  29. aggregation = Notification.collection.aggregate(pipeline)
  30. hashed_aggregation = Hash[aggregation.map { |u| [u['_id'], u] }]
  31.  
  32. final_data = []
  33. new_data = hashed_campaigns.as_json.each do |k,v|
  34.  
  35. v["engaged"] = hashed_aggregation.as_json.key?(k) ? hashed_aggregation.as_json[k]["engaged"] : 0
  36. v["non_opened"] = hashed_aggregation.as_json.key?(k) ? hashed_aggregation.as_json[k]["non_opened"] : 0
  37. v["opened"] = hashed_aggregation.as_json.key?(k) ? hashed_aggregation.as_json[k]["opened"] : 0
  38.  
  39. end
  40.  
  41. return new_data.map { |key,value| value }
  42. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement