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

标签 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" }

我正在尝试创建一个仅返回特定时间戳范围内的文档的 View 。我也希望能够按类型进行过滤。

这是我对数据的 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);
}

我的问题仍然是:

  • 在哪里可以检索 map 函数中的开始键和结束键?
  • 如何添加附加类型过滤器以仅获取特定类型的报告。

我知道我可能需要使用reduce函数,但这超出了我的能力范围。这是默认的归约函数,但我不确定它如何与 map 函数一起使用。

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

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

最佳答案

使用 map 函数获取特定类型的报告 -

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

查询 View 时,只会返回“report”类型的文档。如果您需要支持多种类型,则必须为每种类型创建一个新 View 。

要查询此 View 并指定开始和结束时间戳,只需将它们添加到您的查询中即可 -

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

Reference

关于javascript - Couchdb使用reduce函数和startkey/endkey过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388591/

相关文章:

javascript - 我不想在文本框中输入格式为 :123-12-1234 or 123456789 的 9 位数字

javascript - 为什么我们在 redux applyMiddleware 函数中执行 slice() 和 reverse() ?

javascript - React Js 调用另一个传递 props 的函数

javascript - IE。通过属性 "disabled"<Select> block 滚动条禁用

javascript - 有没有好的方法来替换集合中的所有 couchDB 对象?

javascript - 我如何进行部分更新或其他方法来更新 PouchDb 中的复杂文档?

couchdb - 跟踪 pouchdb 中的复制/更改

couchdb - 长 ID 的性能

rest - CouchDB - CouchApp 的任何替代品?

javascript - jquery 和 json 数组