0

次のレコード構造があります(重要なビットのみを含めるように簡略化されています):

_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;

マップ/リデュースからこの動作を取得するために従うべき標準パターンはありますか?

4

1 に答える 1