次のレコード構造があります(重要なビットのみを含めるように簡略化されています):
_id: couchDB generated ID
_rev: couchDb generated revision number
_creationDate: timestamp for when the record was created
_amount: how much money was paid
_type: how they paid (Visa, MC, etc.)
creationDate を開始キーと終了キーとして使用して、各支払いタイプの合計を合計できるようにする必要があります。可能な支払いタイプの数は不明であるため、タイプごとに複数のクエリを作成することは避けたいと思います。最初に使用可能なすべての型を照会し、次に特定の型ごとに 1 つのクエリを実行する必要があります。
私のビューのマップ:
function(doc) {
if(doc.type=="payment") {
emit([doc.type, doc.creationDate], doc.amount);
}
}
私のビューのreduce関数:
_sum
私のクエリ:
ViewQuery query = new ViewQuery()
.designDocId(GLOBAL_DOC)
.viewName(TOTAL_CREDIT_CARD_PAYMENTS_FOR_TODAY)
.startKey(start)
.group(true)
.groupLevel(1)
.reduce(true);
futon でクエリを実行すると、期待どおりにすべてが構築され、タイプ別にグループ化されたすべてのタイプの合計が得られます (開始または終了が指定されていないため、作成日は無視されます)。クエリを使用して実行すると、合計に含まれる予想範囲外のデータが取得されるため、開始日と終了日が無視されているように見えます。
また、futon を介して開始キーと終了キーを使用してクエリを実行する方法はありますか? 再コンパイル/再インストールの手順をスキップする方法を知っていれば、これらの開発をより迅速に行うことができます。
編集:私が達成しようとしているもののSQLバージョンは、次のようになります:
SELECT sum(amount)
FROM payment
WHERE creationDate >= startDate AND creationDate <= endDate
GROUP BY type;
マップ/リデュースからこの動作を取得するために従うべき標準パターンはありますか?