«Выравнивание» иерархии документов для целей отчетности - PullRequest
3 голосов
/ 05 февраля 2010

Я новичок в CouchDB и просто пытаюсь оценить его полезность в общих задачах. Одна из таких задач заключается в создании отчетов. Моя проблема заключается в следующем: если у меня есть такая структура документа:

{
   "_id": "29763f342ab34fd7b579fd4546aaed93",
   "_rev": "3-f56dccaa214f3e9fce1e1e3e32e710a2",
   "client_id": "sse",
   "outcomes": [
       {
           "contact": "phone",
           "type": "phone_outbound",
           "attempt": "1",
           "provider_id": "123456789",
           "status_outbound": "noanswer"
       },
       {
           "contact": "phone",
           "type": "phone_outbound",
           "attempt": "1",
           "provider_id": "123456789",
           "status_outbound": "noanswer"
       }
   ]
}

и функция карты, подобная этой:

function(doc) {
    for(i=0;i<doc.outcomes.length;i++)
    {
        emit(null, {'client_id':doc.client_id,'outcome':doc.outcomes[i]});
    }
}

результат, который я получаю для каждой сгенерированной строки:

{client_id: "sse", outcome: { contact: "phone", type: "phone_outbound", 
attempt: "1", provider_id: "123456789", status_outbound: "noanswer" }}

вместо

{client_id: "sse", contact: "phone", type: "phone_outbound", 
attempt: "1", provider_id: "123456789", status_outbound: "noanswer"}

см. Дополнительный 'результат:' и круглые скобки в первом примере вывода? Вот чего я не хочу. Очевидно, мое мнение неверно, но я не могу понять, как достичь своей цели. Кто-нибудь может помочь? Ключ должен оставаться нулевым.

Причина, по которой я не ссылаюсь на каждое поле по имени, т.е. doc.contact, заключается в том, что я хотел бы воспользоваться преимуществами бессхемного характера всего этого. Если я добавлю дополнительное поле к «результатам», я бы хотел иметь возможность сообщать об этом, не добавляя его явно в функцию карты.

1 Ответ

2 голосов
/ 06 февраля 2010

doc.outcomes [i] .client_id = doc.client_id; emit (null, doc.outcomes [i]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...