Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Meteor:访问mongo的组功能_Mongodb_Meteor_Mapreduce - Fatal编程技术网

Mongodb Meteor:访问mongo的组功能

Mongodb Meteor:访问mongo的组功能,mongodb,meteor,mapreduce,Mongodb,Meteor,Mapreduce,我试图获得未知大小的数据收集的平均值,因此我想在服务器端编写如下内容: @Mileage = new Meteor.Collection("mileage") Meteor.publish "average", -> Mileage.group initial: count: 0 total: 0 reduce: (doc, out) -> out.count++ out.total += doc.mileag

我试图获得未知大小的数据收集的平均值,因此我想在服务器端编写如下内容:

@Mileage = new Meteor.Collection("mileage")

Meteor.publish "average",  ->
  Mileage.group
    initial:
      count: 0
      total: 0

    reduce: (doc, out) ->
      out.count++
      out.total += doc.mileage

    finalize: (out) ->
      out.avg = out.total / out.count
我可以做一个
meteor mongo
,这段代码(当然可以翻译成Javascript)运行良好。如何访问聚合函数,如
Collection.group
?还是有更好的方法可以做到这一点,而我却错过了


还有,是这样的反应。假设我在客户机上订阅了一些东西,并且它在模板中被引用。当
里程数
文档集合中的某些内容发生变化时,平均值也会发生变化。我是否能够依靠Meteor的反应式更新将其推送到客户端?

Meteor不直接支持聚合。要使用这些其他功能,您需要手动执行

您可以使用atmosphere上的插件来完成大部分缺少的内容

唯一的问题是,您不能在客户机上正确地执行这些类型的查询(minimongo)。您可以执行这些操作,但查询将通过方法调用中继到服务器。(意思是它不是反应性的)

您可以使用聚合管道或map reduce查询重新生成组查询

如果您希望在客户端上获得某种反应式查询,您可以在Handlebar helpers中解释数据,这可能会有所帮助:

Template.hello.average = function() {
    var count;
    var data = YourCollection.find().map(function(doc) {
        count++;
        return doc.mileage;
    });


    var reduce = _.reduce(data, function(total, item) {
        return total+item;
    });

    return reduce / count;

}

当然,它可以对您想要做的事情进行一些修改,但我们的想法是使用下划线的reduce来代替minimongo的reduce。

我显然没有得到一些东西。如果我收集了(比如)20K个文档的数据,计算客户端的平均值可能是个坏主意。这难道不会使客户机和服务器之间的并行性变得无关紧要吗?我也不知道如何做到这一点,当有人改变他们的里程时,每个人都能看到平均的变化。也许你可以将它的缓存值存储在另一个集合中,然后在服务器上进行计算。通过这种方式,你可以让它都是被动的&不必太担心计算的大小?