我是 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"
}
]
}
和这样的 map 函数:
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"}
在第一个示例输出中看到额外的'outcome:' 和括号了吗?那就是我不想要的。显然我的观点是错误的,但我不知道如何实现我的目标。有人可以帮忙吗? key 需要保持为空。
我没有按名称(即 doc.contact)引用每个字段的原因是我想利用它们的无模式特性。如果我向“结果”添加一个额外的字段,我希望能够在不将其显式添加到 map 函数的情况下报告它。
最佳答案
doc.outcomes[i].client_id = doc.client_id; emit(null, doc.outcomes[i]);
关于couchdb - 出于报告目的“展平”文档层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2205502/