Mongodb mongo聚合框架按顺序获取事务

Mongodb mongo聚合框架按顺序获取事务,mongodb,sequence,aggregation-framework,Mongodb,Sequence,Aggregation Framework,如何在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'} re

如何在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'}

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

您需要重新设计模式。我可以想出两种方法。在应用程序中,您可以跟踪会话的单击路径。在向集合中插入操作时,还需要跟踪以前的交互。一旦你有了这个,你只需要做一些类似于
db.actions.find({prevAction:“clicked”,action:“video play”}).count()
。这将是非常快的

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

{_id:sessionid
user:usderid
actions:[
{...login}
{...click link}
{...play video}
]}
您可以通过向上翻转来创建此集合。确保操作子文档保持较小,这样就不会超过标准文档的16MB限制。还将集合的填充因子设置为“powerso2”


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

Hmm这确实是一个有趣的、独特的问题,如果我可以问一下,用例是什么?用例是将页面加载时观看的视频的观看次数与用户在页面上交互时观看的视频的观看次数分开。您能解释一下在单击操作后进行“视频播放”意味着什么吗?我想在您提供的记录选择中提供一个样本序列。因此,在上面的记录中,让我们假设时间:1和时间:6是操作的结果:点击导致的视频播放是在时间:1和时间:6而不是时间:4,我会说“还将填充因子设置为'powerso2'”与此不同的是,您实际上需要在集合上启用它,如下所述:编辑:还将集合的填充因子设置为“powerso2”