使用MongoDB进行漏斗分析?

4

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

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

我想创建一份报告,来显示一个特定的漏斗:
例如: 漏斗是:事件1 -> 事件2 -> 事件3 我想找到以下的数量:
1. 事件1 2. 事件1然后事件2 3. 事件1然后事件2再然后是事件3
同时考虑会话,即在单个会话中发生的事件。 注意:只想明确,我希望能够创建任何我定义的漏斗,并能为其创建报告。
1个回答

2
您的解决方案可能围绕这样的聚合展开:
db.event.aggregate([
    { $group: { _id: '$tracInfo.sessionId', events: { $push: '$eventName' } } }
])

每个生成的文档都将包含一个sessionId和eventName列表。根据需要向$group结果添加其他字段。我想在管道中检测您所需的序列的逻辑可能会很复杂,因此您可以考虑将结果保存到另一个集合中,以便随时检查。2.6版本提供了一个新的$out运算符,正好可以用于这种情况。

谢谢你提供的提示,让我最初添加了group子句,我会添加_id:{sessionId + user},新的$out操作符将有所帮助,因为我认为找到序列将不得不通过实用方式完成。 - Ninad
1
如果(例如)事件之间的时间是感兴趣的,当然您会想要 { $push: { 'name': '$eventName', 'time': '$timeStamp' } }。 - Ben Gamble
ya timeStamp正在参与事件间平均时间的计算以及检查操作序列。 - Ninad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接