Question

I have a collection named 'event' it tracks event from mobile applications. The structure of event document is

{
  eventName:"eventA",
  screenName:"HomeScreen",
  timeStamp: NumberLong("135698658"),
  tracInfo:
       {
         ...,
         "userId":"user1",
         "sessionId":"123cdasd2123",
         ...
       }
}

I want to create report to display a particular funnel:

eg: funnel is : event1 -> event2 -> event3 I want to find count of:

  1. event1
  2. event1 then event2
  3. event1 then event2 and then event3

and the session is also considered i.e occurred in single session. Note: just want to be clear, I want to be able to create any funnel that I define, and be able to create a report for it.

Was it helpful?

Solution

Your solution is likely to revolve around an aggregation like this:

db.event.aggregate([
    { $group: { _id: '$tracInfo.sessionId', events: { $push: '$eventName' } } }
])

where every resulting document will contain a sessionId and a list of eventNames. Add other fields to the $group results as needed. I imagine the logic for detecting your desired sequences in-pipeline would be pretty hairy, so you might consider saving the results to a different collection which you can inspect at your leisure. 2.6 features a new $out operator for just such occasions.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top