【问题标题】:Funnel analysis using MongoDB?使用 MongoDB 进行漏斗分析?
【发布时间】:2014-06-13 14:32:25
【问题描述】:

我有一个名为“事件”的集合,它跟踪来自移动应用程序的事件。 事件文档的结构是

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

我想创建报告以显示特定漏斗:

例如: 漏斗是:event1 -> event2 -> event3 我想找到计数:

  1. 事件1
  2. event1 然后 event2
  3. event1 然后 event2 然后 event3

并且会话也被认为是发生在单个会话中。 注意:只是想清楚一点,我希望能够创建我定义的任何渠道,并能够为其创建报​​告。

【问题讨论】:

    标签: java mongodb mapreduce aggregation-framework bigdata


    【解决方案1】:

    您的解决方案可能围绕这样的聚合:

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

    每个生成的文档都将包含一个 sessionId 和一个 eventNames 列表。根据需要将其他字段添加到 $group 结果。我想在管道中检测所需序列的逻辑会非常复杂,因此您可以考虑将结果保存到不同的集合中,您可以在闲暇时进行检查。 2.6 为此类场合提供了一个新的$out operator

    【讨论】:

    • 感谢您最初添加组子句的提示,我将添加 _id :{sessionId + user} 并且新的 $out 运算符将有所帮助,因为必须务实地完成查找序列认为
    • 如果(例如)事件之间的时间是感兴趣的,当然你会想要 { $push: { 'name': '$eventName', 'time': '$timeStamp' } }
    • ya timeStamp 正在进入,因为它涉及查找事件之间的平均时间以及检查操作顺序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多