2012-02-18 9 views
5

に削減し、私はこのように見える文書の数がありますCouchDBの地図/配列

{userId: 123, msg:{ timestamp:123456, event:"actionA"} }

{userId: 123, msg:{ timestamp:123466, event:"actionB"} }

etc...

地図は、fn:

emit(doc.userId, [doc.msg])

FN削減:

return [].concat.apply([], vs)

これらの関数は、私が期待して何をするように見えるので、私は私のような出力が表示しようと思いましたしたい:

Key: 123, Value: [{timestamp:123456, event:"actionA"}, {timestamp:123466, event:"actionB"}, ...etc...]

をしかし、私はを取得していますがオーバーフローエラーを減らし、「出力を減らす必要があります。実際、couchdb docsは、「経験則として、reduce関数は単一のスカラー値に減少するはずです」と述べています。 ... "CouchDBは、あなたが"間違った方法 "を減らすことを試みると警告を出します。

私はCouch MRを「間違った方法」としていると思います。このような計算を行う「正しい方法」は何でしょうか?

答えて

4

私はこれまでにもヒットしました。 CouchDBは、肥満リストではなく高額リストを好きです。言い換えれば、あなたはおそらくキーであなたが望むものを見ることができ、それらを同じものに縮小することはできません。

userIdからのすべてのメッセージを表示する場合は、reduce関数は必要ありません。 ?key=123であなたのビューを照会するだけです。そのuserIdのすべてのメッセージが表示され、サイズに制限はありません。

フォーマットに不満がある場合(単純ににすると、ソファから送信されるJSONを変更する必要があります)、Simonのリスト機能のリンクは正しいです。

2

正しい方法はlist functionです。あなたが望むなら、リスト関数がJSONを出力するようにすることができます。