我是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,我想利用它的无模式特性。如果我在“结果”中添加一个额外字段,我希望能够在不将其明确添加到地图功能的情况下进行报告。
答案 0 :(得分:2)
doc.outcomes [i] .client_id = doc.client_id; emit(null,doc.outcomes [i]);