Mapreduce 选择CouchDB中值为max的记录

Mapreduce 选择CouchDB中值为max的记录,mapreduce,couchdb,Mapreduce,Couchdb,我有一个包含156个json文档的couchdb数据库。我希望找到文档中某个值的最大值,然后生成包含该最大值的整个文档。我使用了这个代码,但它似乎不起作用。这可能有助于你理解我的意思 功能(doc){ 变量i,m; 对于(i=0;i

我有一个包含156个json文档的couchdb数据库。我希望找到文档中某个值的最大值,然后生成包含该最大值的整个文档。我使用了这个代码,但它似乎不起作用。这可能有助于你理解我的意思

功能(doc){
变量i,m;
对于(i=0;i

我还想选择两个最重要的文档,它们具有最大值。

仅使用map函数是行不通的,因为map/reduce的工作方式无法同时向map函数提供完整的键和值集。 我会使用一个reduce函数。大概是这样的:

地图功能

function(doc) {
  var i,m;
  for (i = 0; i < doc.watchers.length; i++) {
    emit([doc._id, doc.watchers[i]], doc.watchers);
  }
}
功能(doc){
变量i,m;
对于(i=0;i
还原函数

功能(键、值){
var-top=0;
var指数=0;
对于(i=0;i顶部){
top=键[i][1];
指数=i;
}
}
返回({键[index],值[index]})
}
要使此策略起作用,您需要使用group_level=1进行查询,以便coach将按文档id分组的结果传递给map函数。
我还没有测试这个解决方案,它还没有解决你的第二个问题。如果你认为它正确的话,我可以改进它。

如果“if”使用了==而不是=,这会有效吗?
function(keys, values) {
  var top=0;
  var index=0;
  for (i=0;i<keys.length;i++) {
    if (keys[i][1] > top) {
      top = keys[i][1];
      index = i;
    }
  }
  return({keys[index], values[index]})
}