Mongo Map Reduce返回一个对象数组

时间:2015-09-17 11:20:29

标签: javascript mongodb mapreduce

我一直在尝试使用Mongo 2.6.11中的MapReduce功能来帮助将对象数组作为值返回到相应的键。

例如,给定MapReduce作业的以下输入:

{ IncidentNumber : 123, StartLoc : 5, EndLoc : 10, },
{ IncidentNumber : 123, StartLoc : 10, EndLoc : 15, }, 
{ IncidentNumber : 123, SStartLoc : 10, EndLoc : 15, }, 
{ IncidentNumber : 321, StartLoc : 0, EndLoc : 5, }, 
{ IncidentNumber : 321, StartLoc : 10, EndLoc : 20, }

我想得到如下输出:

{ IncidentNumber : 123, Locations : [{StartLoc : 5, EndLoc : 10},{StartLoc : 10, EndLoc : 15}, {StartLoc : 10, EndLoc : 15}],
{ IncidentNumber : 321, Locations : [{StartLoc : 0, EndLoc : 5},{StartLoc : 10, EndLoc : 20}]

我目前的map和reduce函数如下:

var mapFunction = function() {
    emit(this.IncidentNumber, {StartLoc : this.StartLoc, EndLoc: this.EndLoc} )
}

var reduceFunction = function(key, values) {
    var out = []
    return out.push(values);
}

这给我的结果如下:

{ "_id" : 50144, "value" : 1 }
{ "_id" : 68971, "value" : { "startLoc" : 10, "endLoc" : 5} }
{ "_id" : 108294, "value" : 1 }
{ "_id" : 165130, "value" : 1 }
{ "_id" : 194016, "value" : 1 }
{ "_id" : 210018, "value" : 1 }
{ "_id" : 210195, "value" : 1 }
{ "_id" : 212069, "value" : 1 }

我知道我的reduce函数不正确,我不确定这是否是一个奇怪的用例,因为我并没有真正做任何实际的'减少'。但我不确定问题到底是什么。任何帮助将不胜感激。

感谢。

经过一些搜索后,我找到了一种方法,可以根据这篇文章MongoDB Map/Reduce Array aggregation question来实现这一点。对于试图解决相同问题的任何人我使用的map / reduce函数如下:

var mapFunction = function() {
  emit( { 
    incident: this.IncidentNumber, 
  } , { 
    data: [ { start : this.startLoc, end : this.endLoc} ]
  } );
}
var reduceFunction = function(key,values) {
  var out = [];
  values.forEach(function(d){
    Array.prototype.push.apply(out, d.data);
  });
  return { data: out };
}

0 个答案:

没有答案
相关问题