您可以使用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;
}