使用CouchDB(1.6.1)List函数输出到csv文件

时间:2017-07-10 12:14:52

标签: csv couchdb

我正在尝试掌握使用CouchDB 1.6.1中的列表函数将特定字段输出到csv文件的原则/语法。

我已经为html设置了一个简单的输出,这看起来更容易,而且效果很好。

我想要做的是有一个list函数需要的视图,从数据库输出所选字段并将数据输出到csv文件。

我似乎无法做的是让list函数从视图输出中“读取”特定字段,我成功地获取了html输出。

view函数看起来像这样:

function(doc){
emit({'A':doc.a, 'B':doc.b, 'C':doc.c.d  .....}, null);}

html list函数看起来像这样:

"function(head, req){
start({'headers': {
'Content-Type': 'text/html' }});
send('<html><body><table>');
send('<tr><th>A</th><th>B</th><th>C</th></tr>');
while(row=getRow()){
send(''.concat( '<tr>', '<td>' + toJSON(row.key.A) + '</td>','<td>' + toJSON(row.key.B) + '</td>','<td>' + toJSON(row.key.C) + '</td>', '</tr>' ));}
send('</table></body></html>');}"

同一视图的csv输出的类似列表函数应如下所示:

"function(head, req){
start({'headers': { 'Content-Type': 'text/csv' }});
send('A' +','+ 'B' +','+'C' + '\\n');
while(row=getRow()){
send(''.concat( toJSON(row.key.A)  , toJSON(row.key.B) ,  toJSON(row.key.C) ));};}"

这导致“"error":"compilation_error","reason":"Expression does not eval to a function ...."

我已经尝试了csv函数的多种变体而没有成功,除了大量错误格式化的文本。

在某个网站上,csv列表功能的推荐起点是:

function (head, req) {
start({

    “headers”: {

      “Content-Type”: “text/csv”

     }

  });

send(‘Username, Name, Email\n’);

while(row = getRow()) {

    send(row.value.username+’,’+row.value.email+’,’+row.value.metadata.name+’\n’);

  }

} 

我根本无法使用这种结构。

我将非常感谢您使用正确语法的一些输入。

1 个答案:

答案 0 :(得分:3)

我能够找到指南here。 Oliver Kurowski的幻灯片。

基本原则是:

"views": {
"byPrice": {
"map": "function(doc){emit(doc.price, [doc.make,doc.year]);};"
}
}
"lists": { 
"csv": "function(head,req){start({'headers':{'Content-Type':'text/csv'}});send('Make'+','+'Year'+','+'Price'+'\\n');while(row=getRow()){send(row.value+','+row.key+'\\n');}};"
}

工作正常。

谢谢奥利弗。