使用MongoDb中的mapreduce计算平均值

时间:2017-07-18 15:05:16

标签: mongodb mapreduce

我有1000万条记录的集合,类似于此。

completed

用户ID是唯一的。我必须计算X的平均值和Z的总和。我可以使用以下mapReduce函数计算Z的总和

{
    "_id" : ObjectId("596dd10bbd1a6628ace1c14c"),
    "X" : 13212,
    "Z" : 173836,
    "userID" : 9354785
}

我如何计算X的平均值?

我尝试了Array.avg(Z),但它返回与sum(Z)相同的输出。

2 个答案:

答案 0 :(得分:0)

看起来可以使用Aggregation Pipeline$avg$sum运算符更简单地表达要求。

输入

> db.transactions.find()
{ "_id" : ObjectId("5970e59e26507421fa20bee9"), "X" : 13212, "Z" : 173836, "userID" : 9354785 }
{ "_id" : ObjectId("5970e5a426507421fa20beea"), "X" : 1234, "Z" : 5678, "userID" : 1 }
{ "_id" : ObjectId("5970e5a826507421fa20beeb"), "X" : 100, "Z" : 200, "userID" : 2 }

聚合管道

> db.transactions.aggregate([
    {
        $group : {
            _id: "aggregates",
            avgX: {
                $avg: "$X"
            },
            sumZ: {
                $sum: "$Z"
            }
        }
    }
])

输出

{ "_id" : "aggregates", "avgX" : 4848.666666666667, "sumZ" : 179714 }

答案 1 :(得分:0)

您没有传递(键,值)对参数来减少reduceFunction1。 试试这个:

angular.module('testapp', [])
    .factory('ImageEditor', ['$window', function($window) {
    return $window.ImageEditor;
  }])
.controller('testCtrl', ['$window', function($scope) {
  var imageEditor = new tui.ImageEditor('#tui-image-editor-container', {
    includeUI: {
      theme: whiteTheme,
      menuBarPosition: 'bottom'
    },
    cssMaxWidth: 700,
    cssMaxHeight: 500,
    selectionStyle: {
      cornerSize: 20,
      rotatingPointOffset: 70
    }
  });

  imageEditor.loadImageFromFile('./img/test.png', 'SampleImage').then(() => {
    imageEditor.addText('Init Text');
    // more things here if you like
  });

  window.onresize = function() {
    imageEditor.ui.resizeEditor();
  }
}]);