我试图了解如何使用CouchDB和PouchDB返回有关文档的计算数据。 假设我的CouchDB上有两种类型的文档:阻止和报告。
报告包括:report_id
,block_id
和date
。
阻止包括:block_id
和name
。
我想为每个块计算它的最后一次report_id(最新报告的ID),并将其与块的文档一起返回。
有没有办法实现这一目标? 我假设某种类型的视图可以解决问题,但我无法弄明白。
答案 0 :(得分: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作为键映射文档,时间戳+ report id作为reduce函数的值。
地图:
function (doc) {
if(doc.type == "report")
emit(doc.block_id,{date:doc.created,report:doc._id});
}
然后,我们将创建一个reduce函数。当rereduce为false时,我们将简单地返回值。如果rereduce为true,我们将找到最大时间戳并返回与其关联的报告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;
}