0

現在、私のコードは次のようになります

function(keys, values, rereduce){
    return {"key":keys[0][0],"count":values.length};
}

これを実行すると、結果の行は次のようになります。

key = None, value={u'count':3,u'key':u'123456'}

value 属性の JSON 文字列を解析するだけなので、これは私の目的には合っていますが、やり方が間違っているようです。

では、reduce 関数に None ではなくキー値を発行させるにはどうすればよいでしょうか?

4

3 に答える 3

1

あなたのコードは最初の削減にのみ有効だと思います。rereduce では失敗します。Introduction to CouchDB Views: 1.2.2 Reduce Functionsを読んでください。3 番目の引数 ( ) がである場合、宣言の最初の引数 ( key) に注意してください。reduce()rereducetrue

私はまた、あなたcountが期待どおりに動作しないことも考えていますrereduce==true。カウントをカウントするのではなく、以前の削減からのカウントを合計する必要があります

于 2012-08-16T13:27:26.803 に答える
0

確かに十分なコンテキストではありませんが、reduce 関数を意図した方法とは異なる方法で考えている可能性があります。CouchDBガイドから

値を単一のスカラー値、または小さいサイズのスカラー値の固定数を持つ小さな固定サイズのオブジェクトまたは配列に削減しない場合は、おそらく間違っています。

あなたの例は小さなものに縮小されますが、それは偶然のように見えます。何らかのキーを出力したい場合は、map 関数が必要になる場合があります。または、自分が行っていることと、それが MapReduce モデルにどのように適合するかを再考します。

于 2012-08-15T20:28:52.190 に答える
0

私は何が起こっているのかを理解しました。reduce 関数は単一のスカラー値を作成していましたが、私が欲しかったのはキーと値のペアのリストでした。これは、groupingを使用していなかったために発生していました。

'group=true' 引数をクエリに追加することで、reduce として _count を使用して生成されるようになりました

key = 123456, value=3

グループ化されていないということは、すべてのデータが 1 つのスカラー値に縮小されたことを意味します。グループ化を有効にすることで、同じキー値を持つアイテムだけが削減されます。これは私が望んでいたことです。

于 2012-08-16T11:46:56.037 に答える