2017-07-17 51 views
0

我想了解如何返回使用CouchDB和PouchDB的文檔計算的數據。 假設我在我的CouchDB上有兩種類型的文檔:報告顯示計算的數據與CouchDB和PouchDB

報告包括:report_id,block_iddate

Block由:block_idname組成。

我想爲每個塊計算它的上一次report_id(最新報告的ID),並將其返回給塊的doc。

有沒有辦法做到這一點? 我假設某種類型的視圖會執行該技巧,但我無法弄清楚。

回答

1

您可以使用CouchDB中的map/reduce函數執行此操作。

比方說你有這些文件:

{ 
    "_id": "report_1", 
    "type": "report", 
    "block_id": "block_1", 
    "date": "1500325245" 
} 



{ 
    "_id": "report_2", 
    "type": "report", 
    "block_id": "block_1", 
    "date": "1153170045" 
} 

你想獲得最高的時間戳(在這種情況下,repot_1)的報告。

我們首先創建一個map函數,該函數將bloc_id作爲關鍵字映射文檔,將timestamp + report id作爲reduce函數的值。

地圖:

function (doc) { 
    if(doc.type == "report") 
    emit(doc.block_id,{date:doc.created,report:doc._id}); 
} 

然後,我們將創建一個減少功能。當rereduce爲false時,我們將簡單地返回值。當rereduce是真實的,我們會發現最大的時間戳,並返回與之關聯

減少的報告ID功能:

function (keys, values, rereduce) { 
    if (rereduce) { 
     var max = 0; 
     var maxReportId = -1; 
     for (var i = 0; i < values.length; i++) { 
      var val = values[i][0]; 
      if (parseInt(val.date) > max) { 
       max = val.date; 
       maxReportId = val.report; 
      } 
     } 
     //We return the report id of the most recent report. 
     return maxReportId; 
    } else 
     return values; 
}