在MongoDB上通过map/reduce发送关联数组的更好方法是什么



这是我的函数:

地图

function () {
  // initialize KEY
  // initialize INDEX (0..65536)
  // initialize VALUE
  var arr = [];
  arr[INDEX] = { val: VALUE, count: 1 }; 
  emit(KEY, { arr: arr });
}

减少

function (key, values) {
  var result = { arr: [] };
  for (var i = 0; i < values.length; i++) {
    values[i].arr.forEach(function (item, i) {
      if (result.arr.hasOwnProperty(i)) {
        result.arr[i].val += item.val;
        result.arr[i].count += item.count ;
      } else {
        result.arr[i] = item;
      }
    });
  }

如您所见,我正在尝试将关联数组从映射发送到reduce。但是当我尝试枚举数组的值时values[i].arr.forEach我得到列表 0..max_index。所以,每次归约我都必须枚举很多未定义的元素。

当我尝试在映射处枚举数组(arr)的值时,我得到了预期的结果(仅定义的元素)。

实际上,我不确定关联数组是我的任务的最佳解决方案。但是我找不到更快的方法来按id查找元素。

您能否回答以下问题:

  1. 为什么在映射减少

  2. 我应该使用什么数据结构(或如何使用我的数组)来优化我当前的解决方案?

  1. 我决定使用对象:

    var arr = {};arr[INDEX] = { val: VALUE, count: 1 };

它按预期与for .. in一起工作。

相关内容

  • 没有找到相关文章

最新更新