【问题标题】:return value as key on map reduce返回值作为 map reduce 上的键
【发布时间】:2013-02-01 18:31:19
【问题描述】:

目前我对 couchdb 的看法总是返回如下内容:

{
  "key":"somekey",
  "value":"somevalue"
}

我想知道有没有办法返回这样的东西:

{
  "somekey":"somevalue"
}

我需要直接访问“somekey”,而不必在整个数组中搜索带有“somekey”值的键。

谢谢

【问题讨论】:

  • key 不仅可以是字符串,还可以是数组(复合键的常见情况)和对象(由于对键顺序没有任何保证而导致的罕见情况) - 您可能会遇到一些问题这些情况。

标签: javascript mapreduce couchdb


【解决方案1】:

当使用视图时,CouchDB 没有提供直接的方法来返回文档集合,除了您所看到的键/值。

您需要将客户端的数据映射到键控索引,或者直接从视图中通过键请求文档:

/sample/_design/docs/_view/by_somekey?key="somekey"

如果您正在寻找 JavaScript 中的快速映射选项(避免为每次迭代调用一个函数),您当然可以使用这个简单的逻辑:

// docs are the documents returned from the view
var map={};
for(var i=0,len=docs.length;i<len;i++) {
  map[docs[i].key] = docs[i].value;
}

【讨论】:

    【解决方案2】:

    您可以使用 underscoreJS (http://underscorejs.org/#reduce) 来做到这一点。

    var map = {
      "key":"somekey",
      "value":"somevalue"
    };
    
    var result = _.reduce(map, function(key, value){
        var result = {};
        result[key] = value
        return result;
    });
    
    alert(result.somekey);
    

    http://jsfiddle.net/BcYtw/1/

    【讨论】:

    • 原始文档将位于数组中,而不是单个对象中。您的代码不适用于 Bnif 的情况。
    • 第一个参数记录为列表。正如您在 _.map 示例中所见,它可以是数组或对象。
    【解决方案3】:

    如果您不喜欢 Couch 查询的格式或数据,您可以使用 list function 随意重新格式化。像这样的东西应该适合你:

    function(head, req){
      send('[');
      row = getRow();
      if (row){
        // here you make your own JS structure to be returned,
        // serialize it with toJSON() and send to client with send()
    
        // First row:
        var new_row = {};
        new_row[row.key] = row.value;
        send(toJSON(new_row));
    
        while(row = getRow()){
          // Next rows:
          send(',');
          var new_row = {};
          new_row[row.key] = row.value;
          send(toJSON(new_row));
        }
      }
      return ']';
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2018-11-16
      • 2016-09-09
      相关资源
      最近更新 更多