ここで私が混乱しているのは (私が思うに)、qfun への引数がどうあるべきか、そして戻り値がどうあるべきかということです。READMEは基本的にこれについて何も述べておらず、それが示す例では 2 番目と 3 番目の引数が破棄されています。
今のところ、私は議論を理解しようとしているだけで、Riak を実用的な目的には使用していません。最終的には、これを使用して (遅い、MySQL ベースの) 財務報告システムを再構築しようとしています。ここでの私の目標の無意味さを無視して、なぜ次のbadfun
例外が私に与えられるのでしょうか?
データは名前と年齢のタプル (ペア) であり、キーは名前です。Erlang コンソールからデータを挿入する前に、JSON などへの変換は行っていません。
いくつかの{Name, Age}
ペアが格納され<<"people">>
ているので、MapReduce を使用して (「方法」を理解する以外の理由ではありません)、この最初の使用では変更されていない値を元に戻します。
riakc_pb_socket:mapred(
Pid, <<"people">>,
[{map, {qfun, fun(Obj, _, _) -> [Obj] end}, none, true}]).
ただし、これは私に悪い楽しみを与えます:
{error,<<"{\"phase\":0,\"error\":\"{badfun,#Fun<erl_eval.18.17052888>}\",\"input\":\"{ok,{r_object,<<\\\"people\\\">>,<<\\\"elaine\\\">"...>>}
データを変更せずにマップ関数に渡すにはどうすればよいですか? README にあるものよりも優れた Erlang クライアントのドキュメントはありますか? その README は、入力が何であるかを既に知っていることを前提としているようです。