为什么mongo聚集在meteor中不起反应
我是流星新手。我对流星的反应感到困惑。我可以从Mongo控制台更新集合,它会立即更新UI。但不是mongo aggregate 我正在使用MeteoHacks:aggregate将mongo的aggregate()加载到meteor中 聚合非常有效。我可以在mongo控制台中立即看到数据更新。但是,如果我将其公开给UI,就不会有更新,即使在客户端刷新时也是如此 db.collection:为什么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
{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);