1

reduce関数はmap関数の結果をいくらか組み合わせることになっていることを理解していますが、reduce関数には正確に何が渡されますか?

function(keys, values){
  // what's in keys?
  // what's in values?
}

Futon一時ビュービルダーでこれを調べようとしましたが、取得したのはreduce_overflow_errorsだけでした。したがって、keysまたはvalues引数を印刷して、それらがどのように見えるかを理解しようとすることさえできません。

ご協力いただきありがとうございます。

編集:

私の問題は次のとおりです。布団の一時ビュービルダーを使用しています。

テキストファイルを表す一連のドキュメントがあります(ドキュメントの翻訳を簡単にするために使用するスクリプト用です)。

text_file:
    id   // the id of the text file is its path on the file system

また、上記のファイルに表示されるテキストフラグメントと、各ファイルでのそれらの位置を表すドキュメントもいくつかあります。

text_fragment:
    id
    file_id   // correspond to a text_file document 
    position

text_fileごとに、そのファイルに表示されるテキストフラグメントのリストを取得したいと思います。

4

1 に答える 1

4

アップデート

JavaScript APIの変更に関する注意:2008年5月20日火曜日(Subversionリビジョンr658405)より前は、マップインデックスに行を出力する関数は「map」と呼ばれていました。「emit」に変更されました。

mapそれが名前が変更された代わりに使用されている理由emitです。申し訳ありませんが、最近のバージョンのCouchDBで有効になるようにコードを修正しました。

編集

あなたが探しているのは、SQLデータベース言語での多数の関係または結合だと思います。これは、CouchDBでのこの種のシナリオに対するオプションを正確に説明しているChristopherLenzによるブログ記事です。

最後の部分では、必要なリストに使用できるテクニックについて説明します。次の形式のマップ関数が必要です

function(doc) {
  if (doc.type == "text_file") {
    emit([doc._id, 0], doc);
  } else if (doc.type == "text_fragment") {
    emit([doc.file_id, 1], doc);
  }
}

これで、次の方法でビューをクエリできます。

my_view?startkey=["text_file_id"]&endkey;=["text_file_id", 2]

これにより、フォームのリストが表示されます

  • テキストファイル
  • text_fragement_1
  • text_fragement_2
  • ..

古い答え

CouchDBWikiから直接

function (key, values, rereduce) {
    return sum(values);
}

Reduce関数には、order key、values、rereduceの3つの引数が渡されます。

Reduce関数は、次の2つのケースを処理する必要があります。

  1. rereduceがfalseの場合:

    • keyは、要素が[key、id]の形式の配列である配列になります。ここで、keyはマップ関数によって発行されたキーであり、idはキーが生成されたドキュメントのキーです。
    • 値は、キーのそれぞれの要素に対して発行された値の配列になります。reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)
  2. rereduceがtrueの場合:

    • キーはnullになります
    • 値は、reduce関数への以前の呼び出しによって返される値の配列になります。つまり、reduce(null, [intermediate1,intermediate2,intermediate3], true) Reduce関数は、最終ビューのvalueフィールドと、reduce関数に渡されるvalues配列のメンバーの両方に適した単一の値を返す必要があります。
于 2012-07-31T15:27:14.793 に答える