我的文档设置如下:
{ _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;
}
}
谢谢,任何帮助或指导都将不胜感激。
答案 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"