csv - 从 CouchDB 创建 CSV View

标签 csv couchdb

我知道这应该很容易,但尽管今天花了几个小时看它,但我就是不知道如何去做。据我所知,网上似乎没有简单的示例或教程。

我在 CouchDB 数据库中有几个文档“表”,每个“表”在文档的“架构”字段中都有不同的值。具有相同架构的所有文档都包含一组相同的字段。我想要做的就是能够以 CSV 格式查看不同的“表”,并且我不想在每个架构中指定字段名称列表。

CSV 输出将由 R 脚本使用,因此如果可以避免的话,我不希望输出中出现任何其他 header ;只是字段名称列表,以逗号分隔,值采用 CSV 格式。

例如,“table1”格式的两条记录可能如下所示:

{    
   "schema": "table1",
   "field1": 17,
   "field2": "abc",
   ...
   "fieldN": "abc",
   "timestamp": "2012-03-30T18:00:00Z"
}

{
   "schema": "table1",
   "field1": 193,
   "field2": "xyz",
   ...
   "fieldN": "ijk",
   "timestamp": "2012-03-30T19:01:00Z"
}

我的观点很简单:

"all": "function(doc) {
   if (doc.schema == "table1") {
      emit(doc.timestamp, doc)
   }
 }"

因为我想按时间戳顺序对记录进行排序。

大概列表函数将类似于:

"csv": "function(head, req) {
   var row;
   ...
   // Something here to iterate through the list of fieldnames and print them
   // comma separated
   for (row in getRow) {
      // Something here to iterate through each row and print the field values
      // comma separated
   }
}"

但我就是无法理解剩下的事情。

如果我想要 CSV 输出看起来像

"timestamp", "field1", "field2", ..., "fieldN"
"2012-03-30T18:00:00Z", 17, "abc", ..., "abc"
"2012-03-30T19:01:00Z", 193, "xyz", ..., "ijk"

我的 CouchDB 列表函数应该是什么样子?

提前致谢

最佳答案

适用于给定 map 的列表函数应如下所示:

function(head,req) {
  var headers;
  start({'headers':{'Content-Type' : 'text/csv; charset=utf-8; header=present'}});
  while(r = getRow()) {
    if(!headers) {
      headers = Object.keys(r.value);
      send('"' + headers.join('","') + '"\n');
    }
    headers.forEach(function(v,i) {
      send(String(r.value[v]).replace(/\"/g,'""').replace(/^|$/g,'"'));
      (i + 1 < headers.length) ? send(',') : send('\n');
    });
  }
}

与 Ryan 的建议不同,列表中包含的字段在此函数中不可配置,并且必须写入顺序或包含字段的任何更改。您还必须重写所需的任何引用逻辑。

关于csv - 从 CouchDB 创建 CSV View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942503/

相关文章:

database-design - CouchDB 为每个文档类型创建数据库?

vba - 将 CSV 合并到一张表中并删除标题

java:一次读取所有csv文件并对元素/行求和

ios - 除了 Couchbase,iOS 有稳定的 nosql 数据库吗?

php - couch 和 mysql 之间自动同步数据

nosql - 使用 CouchDB 进行多条件搜索

xml - 实现PowerShell XML to CSV解决方案的问题

c# - 我可以直接下载csv文件而不使用csvhelper定义文件路径吗?

javascript - Angular 在浏览器上下载 csv 文件

caching - 如何禁用/关闭/刷新 couchdb 缓存