Couchdb过滤结果使用reduce函数和startkey / endkey

时间:2016-11-02 19:51:49

标签: javascript couchdb pouchdb

我的文档设置如下:

{ _id: 1, name: "A", timestamp: 1478115739, type: "report" }
{ _id: 2, name: "B", timestamp: 1478103721, type: "transmission" }
{ _id: 3, name: "C", timestamp: 1473114714, type: "report" }

我正在尝试创建一个只返回特定时间戳范围内的文档的视图。而且我希望能够按类型过滤。

以下是我对数据的javascript调用:

db.query('filters/timestamp_type', { startKey: 1378115739, endKey: 1478115740  })
.then(function(resp) {
    //do stuff
})

我只知道在哪里放置开始和结束时间戳。我很难搞清楚我会说我只想要报告的回复。

另外,这是我的滤镜的地图功能,显然甚至不完整。我不确定我是如何访问开始和结束键的。

function (doc) {
  if(type == "report" && startKey >= doc.timestamp && endKey <= doc.timestamp)
    emit(doc._id, doc.name);
}

我的问题仍然存在:

  • 我在哪里检索地图功能中的开始和结束键?
  • 如何添加额外的类型过滤器,仅用于获取特定类型的报告。

我知道我可能需要使用reduce功能,但它已经过了我的脑海。这是默认的reduce函数,但我不确定它如何与map函数一起使用。

function (keys, values, rereduce) {
  if (rereduce) {
    return sum(values);
  } else {
    return values.length;
  }
}

谢谢,任何帮助或指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用地图功能按特定类型获取报告 -

function(doc) {
   if(doc.type == "report") {
     emit(doc.timestamp, doc);
   }
}

查询视图时,只显示类型为&#39;报告的文档。将被退回。如果需要支持多种类型,则必须为每种类型创建一个新视图。

要查询此视图并指定开始和放大结束时间戳,只需将它们添加到您的查询 -

curl -XGET http://localhost:5984/<your-database>/_design/docs/_view/<your-view-name>?startkey="1478115739"&endkey="1478103721"

Reference