2010-02-05 59 views
3

我是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是我想利用它的無模式性質。如果我爲「結果」添加一個額外的字段,我希望能夠報告它而不明確地將其添加到地圖功能。

回答

2

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

+0

完美!感謝marc! – jdee 2010-02-06 18:19:14