我有这样设置的文档:
{ _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"
关于javascript - Couchdb使用reduce函数和startkey/endkey过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388591/