使用CouchDB和PouchDB显示计算数据

时间:2017-07-17 20:13:36

标签: view couchdb pouchdb

我试图了解如何使用CouchDB和PouchDB返回有关文档的计算数据。 假设我的CouchDB上有两种类型的文档:阻止报告

报告包括:report_idblock_iddate

阻止包括:block_idname

我想为每个块计算它的最后一次report_id(最新报告的ID),并将其与块的文档一起返回。

有没有办法实现这一目标? 我假设某种类型的视图可以解决问题,但我无法弄明白。

1 个答案:

答案 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;
}