为报告目的“展平”文档层次结构

时间:2010-02-05 06:53:29

标签: couchdb

我是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 个答案:

答案 0 :(得分:2)

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