我正在尝试掌握使用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’);
}
}
我根本无法使用这种结构。
我将非常感谢您使用正确语法的一些输入。
答案 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');}};"
}
工作正常。
谢谢奥利弗。