MongoDB架构设计和聚合数据计算

时间:2017-06-28 15:37:36

标签: mongodb mongoose mapreduce aggregation-framework

我有一个应用程序以事件的形式存储用户及其行为(在两个集合中)。该应用程序的一个重要功能是根据行为和属性查询用户,例如:“具有属性X的所有用户在过去Z天/周/月内触发事件Y至少10次”

到目前为止,我一直在联系人集合上使用aggregate()对原始数据执行此操作,事件为$lookup。然而,随着事件收集的增长,这变得很慢。

我的想法是将一些预先聚合的事件数据版本存储在一个单独的集合中,每个唯一的事件/用户组合都有一个文档。这些文件将存储:

  • 此用户触发此事件的总次数
  • 他最后一次触发它
  • 他在过去几天/几周/几个月的某些预定时间间隔内触发它的频率

该集合中的文档如下所示:

{
    event: 'my_event',
    user: '593aaa84c685604066a6a0cf',
    total: 79,
    last: '2016-11-01T04:39:52.667Z',
    days: { 0: 4, 1: 8, 2: 4 ... }, // 7 values here (0=today)
    weeks: { ... }, // 3 values here
    months: { ... } // 12 values here
}

然而,我正在努力找出计算时间间隔值的良好策略以及如何使这些数据保持最新。

您有任何建议或替代方法吗?欢迎任何想法:)

0 个答案:

没有答案