使用Mongo连续汇总数据

时间:2018-01-20 21:18:27

标签: mongodb aggregation-framework

我一直在试验Mongo Aggregation Framework,在这里的人们的帮助下,我能够为给定的输入生成正确的输出文档集。我有几个概念问题,但我希望大家可以帮我设计。

我的应用程序是一个运行时系统,它收集它处理的所有事务的数据。所有这些数据都写入Mongo中的分布式分片集合。我需要做的是定期(此时每5秒)运行一个遍历此数据的作业,通过龋齿类别将其汇总,并将汇总的文档附加到一组现有集合(或一个现有集合)。

我对Mongo Aggregration的工作方式有几个挑战:

1 - $ out管道阶段不会附加到目标集合,它会覆盖它 - 我需要附加到不断增长的集合中。它也无法写入分片集合,但我认为这不是一个大问题。

2 - 我不知道如何将其配置为基本上“尾随”输入集合。现在我需要从服务器运行它,并且必须在运行aggregate()命令之前标记要用查询处理的文档集,然后让另一个作业定期返回源集合删除文档已被标记为处理(这假设聚合工作正常并且正确地滚动它们 - 没有交易性)。

任何人都有更好的方法可以做到这一点?

谢谢,

伊恩

1 个答案:

答案 0 :(得分:0)

我建议查看版本3.6(去年11月发布)和称为更改流的功能。改变流是有效的尾巴"你追求。伪代码中的紧凑程序看起来像这样。另请注意我们如何在inputCollection上迭代聚合并按文档将doc写入outputCollection

tailableCursor = db.inputCollection.watch()
while(true) {
    // Block until something comes in;
    document = next(tailableCursor); 

    // Examine document to ensure it is of interest
    if(of interest) {
       cur2 = db.inputCollection.aggregate([pipeline]);
       while(cur.hasNext()) {
          db.outputCollection.insert(cur.next());
       }
    }
}