为什么mongo聚集在meteor中不起反应

为什么mongo聚集在meteor中不起反应,meteor,Meteor,我是流星新手。我对流星的反应感到困惑。我可以从Mongo控制台更新集合,它会立即更新UI。但不是mongo aggregate 我正在使用MeteoHacks:aggregate将mongo的aggregate()加载到meteor中 聚合非常有效。我可以在mongo控制台中立即看到数据更新。但是,如果我将其公开给UI,就不会有更新,即使在客户端刷新时也是如此 db.collection: {a:1,b:2} {a:1,b:2} 守则: inputCollection = new Meteor

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

我正在使用MeteoHacks:aggregate将mongo的aggregate()加载到meteor中

聚合非常有效。我可以在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

顺便说一句,它正在出版,我有'不安全'安装


我想我错过了流星很明显的东西。这是什么?

到目前为止,一切都表明meteor 1.1.0.2存在漏洞。 从Mongo
聚合中使用$out似乎是服务器端的问题

对于任何寻求解决方案的人,都有可能获得如下反应式更新:

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

OtherCollection.insert(results);

是由搜索引擎带来的,不知道是否有用,但我也体验过Meteor中的非反应聚合。我使用了。

无论是否使用聚合,方法调用都不是被动的。我不清楚什么是
AggCollection
。。。您是否期望这就是聚合结果的方向?如果是这样,我想我们需要擦掉黑板,重新开始。@DavidWeldon,你确定吗?我还有其他方法调用“inputCollection.remove({})”,它总是以反应方式更新UI。为了清晰起见,我重命名了一些变量。让我澄清一下-方法调用的结果不是被动的。副作用肯定会很严重。因此,如果我调用一个返回文档的方法,那么该调用不是被动的。如果我调用一个插入文档的方法,那么该操作的结果(新文档)可能会导致客户机上的响应式更新。这有意义吗?计算实时聚合查询非常困难,这就是为什么。@DavidWeldon感谢David。如果您查看我的代码,我将输出到mongo{$out:“output_collection”}中的一个集合。这将成功结束,我可以在mongo控制台中看到结果。但是,我只能在meteor完全重启后才能在UI中看到数据。那么,为什么在聚合中插入mongo文档后与正常插入不同呢?这可能不是您想要的。据我所知,使用带有“$out”的原始方法,所有数据都留在MongoDB中,而且速度很快。使用此方法,当您使用“results=”时,所有内容都会通过(可能)网络连接拉入您的web进程。然后插入将把它全部推回(同样,对于stock Meteor,我认为您需要循环结果)。因此,这可能会暂时占用web服务器上的大量内存,因为整个“结果”都在RAM中。它还可能使用Mongo和web服务器之间的带宽。
Template.debug.helpers({
 agg: function() {
    return outputCollection.find().fetch()[0]
  }
});
results = Collection.aggregate([{
        $group : {
            _id : "$a",
            count: { $sum: 1} //should return 2 with the sample data above
        }
   }]);

OtherCollection.insert(results);