View 使用CouchDB和PockDB显示计算数据
我试图理解如何使用CouchDB和PockDB返回文档上的计算数据。 假设我的CouchDB上有两种类型的文档:块和报告 报告包括:报告id、块id和日期 块包括:块id和名称 我想计算每个块的最后一个报告id,即最近一个报告的id,并将其与块的文档一起返回 有没有办法做到这一点?View 使用CouchDB和PockDB显示计算数据,view,couchdb,pouchdb,View,Couchdb,Pouchdb,我试图理解如何使用CouchDB和PockDB返回文档上的计算数据。 假设我的CouchDB上有两种类型的文档:块和报告 报告包括:报告id、块id和日期 块包括:块id和名称 我想计算每个块的最后一个报告id,即最近一个报告的id,并将其与块的文档一起返回 有没有办法做到这一点? 我假设某种类型的视图会起作用,但我无法理解 您可以使用CouchDB中的map/reduce函数来实现这一点 假设您拥有这些文档: { "_id": "report_1", "type": "report",
我假设某种类型的视图会起作用,但我无法理解 您可以使用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
我们首先创建一个映射函数,该函数将映射文档,其中bloc_id作为键,timestamp+report id作为reduce函数的值
地图:
然后,我们将创建一个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;
}
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;
}