3

我如何在 mongo 聚合框架中执行此操作?鉴于这些记录

record 1. {id:1,action:'clicked',user:'id', time:'1'}
record 2. {id:2,action:'video play',user:'id',time:'2'}
record 3. {id:3,action:'page load',user:'id',time:'3'}
record 4. {id:4,action:'video play',user:'id',time:'4'}
record 5. {id:1,action:'clicked',user:1id', time:'5'}
record 6. {id:2,action:'video play',user:'id',time:'6'}

现在,我如何获得点击操作后的所有“视频播放”?有人遇到过这种聚合吗?

4

1 回答 1

1

您将需要重新设计架构。我可以想到两种方法。在您的应用程序中,您可以跟踪会话的点击路径。当您向集合中插入操作时,您还需要跟踪之前的交互。一旦你有了这个,那么你只需要做类似的事情db.actions.find({prevAction:"clicked",action:"video play"}).count()。这将非常快。

或者,如果您决定要跟踪会话点击路径信息,您可能有如下文档:

{_id:sessionid
user:usderid
actions:[
{...login}
{...click link}
{...play video}
]}

您可以通过执行 upserts 创建此集合。确保将操作子文档保持较小,以免超过标准文档的 16MB 限制。还将集合的填充因子设置为“powersof2”。

拥有此集合后,您可以提取这些文档以获取一些有趣的信息。您想要在此集合上执行的特定聚合将比我之前提出的建议更复杂。您将需要创建一个 MR 流程,该流程可能会在后台定期运行以计算您想要的内容(仅当该区域包含预期的操作序列时才发出键值)。

于 2013-07-25T02:13:00.590 回答