Я знаю, что это должно быть легко, но я просто не могу понять, как это сделать, несмотря на то, что провел несколько часов, глядя на это сегодня. Насколько я могу судить, в Интернете нет простого примера или учебника.
У меня есть несколько «таблиц» документов в базе данных CouchDB, причем каждая «таблица» имеет различное значение в поле «схема» в документе. Все документы с одинаковой схемой содержат одинаковый набор полей. Все, что я хочу сделать, это иметь возможность просматривать различные «таблицы» в формате CSV, и мне не нужно указывать список имен полей в каждой схеме.
Вывод CSV будет использоваться сценарием R, поэтому я не хочу никаких дополнительных заголовков в выводе, если я могу их избежать; просто список имен полей, разделенных запятыми, со значениями в формате 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?
Заранее спасибо