9

http://wiki.apache.org/couchdb/Introduction_to_CouchDB_viewsから

couchdbreduce関数は次のように定義されます

function (key, values, rereduce) {
    return sum(values);
}
  • keyは、要素が[key、id]の形式の配列である配列になります。
  • 値は、キーのそれぞれの要素に対して発行された値の配列になります
  • すなわちreduce([[key1、id1]、[key2、id2]、[key3、id3]]、[value1、value2、value3]、false)

キーの配列に異なるキー値が含まれる場合/理由を理解するのに問題があります。キーの配列に異なるキー値が含まれている場合、どのように処理しますか?

例として、私のデータベースにフォームのアカウント間の移動が含まれていると仮定します。

{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}

アカウントの残高を示すビューが必要です。

私のマップ関数は次のことを行います。

emit( doc.CreditAccount, doc.amount )
emit( doc.DebitAccount, -doc.amount )

私のreduce関数は次のことを行います。

sum(values);を返します。

期待どおりの結果が得られたようですが、reduce関数が異なるキー値を取得する可能性とこれを調整することはできません。

私のreduce関数は最初にキー値をグループ化することになっていますか?その場合、どのような結果が返されますか?

4

1 に答える 1

3

デフォルトでは、Futonは結果を「グループ化」します。つまり、キー(この場合はアカウント)ごとに新しい削減を取得します。グループ機能は、まさにこの状況に対応しています。

生のHTTPAPIを使用すると、すべてのアカウントで合計1つの削減が得られますが、これはおそらく役に立たないでしょう。したがって、アカウントごとに要約を取得するために、独自のアプリケーションでgroup=trueを使用することを忘れないでください。

于 2010-05-04T09:21:55.153 に答える