couchdb - 出于报告目的“展平”文档层次结构

标签 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"
       }
   ]
}

和这样的 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/

相关文章:

security - 使用 _session 进行身份验证

ubuntu 服务器 14.04 64 位操作系统上的 couchdb 1.5.1 进程错误

json - 在 CouchDB 中存储日期时间(时间戳)的最佳方式是什么?

couchdb - CouchDB 3.0 每个文档 8MB 的限制是否包括文档的附件?

couchdb emfile 错误

database-design - 如何在 couchdb 中为简单的相册构建数据库设计?

node.js - 读取带标题的 csv,然后使用 node/grunt 将每一行上传到 couchdb

mysql - CouchDB性能分析

database - CouchDB 和 Amazon S3 的通用接口(interface)

couchdb - 将 CouchDB 复制到本地 couch 会减小大小——为什么?