3

我正在使用带有 nodejs 的猫鼬。我正在使用 mapReduce 来获取按字段分组的数据。所以它作为一个集合给我的所有内容都是仅来自数据库每一行的分组字段的键。

我需要从数据库中获取按字段分组并根据另一个字段排序的所有字段。例如:我有一个数据库,其中包含前往这些地方的地点和票价以及其他一些字段的详细信息。现在我需要以这样一种方式获取数据,即我根据按票价排序的地点对数据进行分组。MapReduce 帮助我获得了这一点,但我无法获得其他字段。

有没有办法使用map reduce来获取所有字段,而不是像上面例子中提到的那样只获取两个字段?

4

1 回答 1

0

我必须承认我不确定我是否完全理解你的要求。但也许以下想法之一可以帮助您:

或者)当你迭代你的 mapReduce 结果时,你可以从 mongodb 获取每个结果的完整文档。这将使您能够访问每个文档中的所有字段,但需要支付一些网络流量。

) 您发送到 emit(key, value) 的值可以是一个对象。因此,您可以构造一个包含所有所需字段的值对象。只需确保为您的 reduce 方法的返回值使用完全相同的对象结构。

我试着用一个(未经测试的)例子来说明。

map = function() {
   emit(this.place, 
        {
           'field1': this.field1, 
           'field2': this.field2, 
           'count' : 1 
        });
}

reduce = function(key, values) {
   var result = { 
       'field1': values[0].field1, 
       'field2': values[0].field2, 
       'count' : 0 };

   for (v in values) {
       result.count += values[v].count;
   }

   return obj;
}
于 2011-07-30T14:26:20.910 回答