時間値のあるレコードがあり、ある期間それらをクエリして、指定された間隔のレコードのみを返すことができる必要があります。
たとえば、12:00から1:00までのすべてのレコードが10分間隔で必要になる場合があり、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])
}
次に、intervalというパラメータを受け入れるリスト関数を作成しました。リスト関数では、行を調べて、現在の行の時刻を最後に受け入れられた時刻と比較します。スパンが間隔以上の場合は、行を出力に追加して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}));
}
これまでのところ、これはうまく機能しています。いくつかの大きなデータに対してテストして、パフォーマンスがどのようになるかを確認します。これをどのように改善できるか、またはこれがソファでの正しい方法であるかについてのコメントはありますか?