【问题标题】:Why is mongo aggregation not reactive in meteor为什么mongo聚合在流星中没有反应
【发布时间】:2017-04-28 21:47:11
【问题描述】:

流星新手在这里。我对 Meteor 的反应感到困惑。我可以从 Mongo 控制台更新集合,它会立即更新 UI。但不是 mongo 聚合?

我正在使用 meteorhacks:aggregate 将 mongo 的 aggregate() 加载到流星中。

聚合效果很好。我可以在 mongo 控制台中立即看到数据更新。但是,如果我将其暴露给 UI,则即使在客户端刷新时也不会更新。

db.collection:

{a:1,b:2}
{a:1,b:2}

代码:

inputCollection = new Meteor.Collection('input_collection')
outputCollection = new Meteor.Collection('output_collection')

Meteor.methods({
    pleaseAggregate: function() {
      inputCollection.aggregate([{
        $group : {
            _id : "$a",
            count: { $sum: 1} //should return 2 with the sample data above
        }
      },
      {$out : "output_collection"}
       ]);
    }
});

HTML

<p>Aggregates: {{agg.count}}</p>

客户端.js

Template.debug.helpers({
 agg: function() {
    return outputCollection.find().fetch()[0]
  }
});

顺便说一句,它正在发布,我安装了“不安全”。

我猜我错过了一些对流星来说很明显的东西。这是什么?

【问题讨论】:

  • 无论您是否使用聚合,方法调用都不是反应式的。我不清楚AggCollection 是什么...您是否期​​望这是汇总结果应该去的地方?如果是这样,我认为我们需要擦掉黑板并重新开始。
  • @DavidWeldon 你确定吗?我还有其他方法调用“inputCollection.remove({})”,它总是会响应式地更新 UI。为了清楚起见,我重命名了一些变量。
  • 让我澄清一下 - 方法调用的 result 不是响应式的。副作用肯定是。因此,如果我调用返回文档的方法,则该调用不是响应式的。如果我调用插入文档的方法,则该操作(新文档)的结果可能会导致客户端发生反应性更新。这有意义吗?
  • 计算实时聚合查询非常困难,这就是原因。
  • @DavidWeldon 谢谢大卫。如果您查看我的代码,我将输出到 mongo {$out : "output_collection"} 中的集合。这成功结束,我可以在 mongo 控制台中看到结果。但是,我可以看到数据在完全重启流星后出现在 UI 中。那么为什么聚合插入一个mongo文档后,和正常插入不一样呢?

标签: meteor


【解决方案1】:

到目前为止,一切都表明了流星 1.1.0.2 之前的错误。 使用来自 Mongo aggregate 的 $out 似乎是服务器端的问题。

对于任何寻求解决方法的人,都可以像这样获得响应式更新:

results = Collection.aggregate([{
        $group : {
            _id : "$a",
            count: { $sum: 1} //should return 2 with the sample data above
        }
   }]);

OtherCollection.insert(results);

【讨论】:

  • 这可能不是你想要的。据我了解,使用带有“$out”的原始方法,所有数据都保留在 MongoDB 中,并且速度很快。使用这种方法,当您使用“results =”时,所有内容都会通过(可能)网络连接进入您的 Web 进程。然后插入会将其全部推回(另外,我认为您需要使用库存 Meteor 循环遍历结果)。因此,这会暂时在 Web 服务器上使用大量内存,因为整个“结果”都将在 RAM 中。它还可能使用 Mongo 和 Web 服务器之间的带宽。
【解决方案2】:

被搜索引擎带到这里,不知道是否有帮助,但我也体验过 Meteor 中的非反应性聚合。我用a library for reactive publications

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多