2012-02-18 3 views
5

I는 다음과 같이 문서의 수 있습니다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은 "경험적으로 환산 함수는 단일 스칼라 값으로 줄여야합니다."라고 말합니다. ... "CouchDB는"잘못된 방법 "을 줄이기 위해 사용하려고하면 경고 메시지를 표시합니다.

그래서 저는 Couch MR을 "잘못된 방법"이라고 생각합니다. 이런 종류의 계산을 수행하는 "올바른 방법"은 무엇입니까?

답변

4

나는 이것을 너무 많이 쳤다. CouchDB는 뚱뚱한 목록이 아닌 키가 큰 목록을 좋아합니다. 즉,보기에서 을 사용하여 원하는 것을 얻을 수 있으며 같은 것으로 줄이지는 않습니다.

userId의 모든 메시지를 보려면 reduce 기능이 필요하지 않습니다. ?key=123으로보기를 쿼리하기 만하면됩니다. 해당 userId에 대한 모든 메시지가 표시되며 크기에는 제한이 없습니다.

형식이 만족스럽지 않으면 (으로 소파에서 보내는 JSON을 변경해야 함) Simon의 목록 기능 링크가 올바른 것입니다.

2

올바른 방법은 list function을 사용하는 것입니다. 원하는 경우 JSON을 출력 할 수 있습니다.