我有具有时间值的记录,需要能够在一段时间内查询它们并仅返回给定时间间隔的记录。
例如,我可能需要每隔 10 分钟从 12:00 到 1:00 的所有记录,给我 12:00、12:10、12:20、12:30、... 12:50、01:00。间隔需要是一个参数,它可以是任何时间值。15 分 47 秒 1.4 小时。
我试图这样做做某种减少,但这显然是错误的地方。
这是我想出的。欢迎评论。
为时间字段创建了一个视图,以便我可以查询一系列时间。视图输出 id 和时间。
function(doc) {
emit([doc.rec_id, doc.time], [doc._id, doc.time])
}
然后我创建了一个列表函数,它接受一个称为间隔的参数。在列表函数中,我通过行工作并将当前行时间与最后接受的时间进行比较。如果跨度大于或等于间隔,我将该行添加到输出并对其进行 JSON 化。
function(head, req) {
// default to 30000ms or 30 seconds.
var interval = 30000;
// get the interval from the request.
if (req.query.interval) {
interval = req.query.interval;
}
// setup
var row;
var rows = [];
var lastTime = 0;
// go thru the results...
while (row = getRow()) {
// if the time from view is more than the interval
// from our last time then add it.
if (row.value[1] - lastTime > interval) {
lastTime = row.value[1];
rows.push(row);
}
}
// JSON-ify!
send(JSON.stringify({'rows' : rows}));
}
到目前为止,这运作良好。我将针对一些大数据进行测试,看看性能如何。关于如何更好地做到这一点的任何评论,或者这将是沙发的正确方式吗?