CouchDB Map / Уменьшить в массив - PullRequest
5 голосов
/ 18 февраля 2012

У меня есть несколько документов, которые выглядят так:

{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 говорится, что «как правило, функция сокращения должна сводиться к одному скалярному значению».... «CouchDB выдаст вам предупреждение, если вы попытаетесь использовать« уменьшить неправильный путь »».

Итак, я предполагаю, что я использую Couch MR «неправильный путь».Каков будет «правильный путь» для такого рода расчетов?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Я и раньше это ударил.CouchDB любит высокие списки, а не толстые списки.Другими словами, вы, вероятно, можете получить то, что хотите, с помощью ключей в представлении, не сводя их к одной и той же вещи.

Если вы хотите видеть все сообщения из userId, выне нужно уменьшать функцию.Просто запросите ваш взгляд с помощью ?key=123.Вы увидите все сообщения для этого userId, и размер не ограничен.

Если вы недовольны форматом (если вы просто должны изменить JSON, который посылает вам кушетка),тогда ссылка на список функций Саймона верна.

2 голосов
/ 19 февраля 2012

Я думаю, что правильный способ - использовать список функцию . Вы можете получить функцию вывода списка в формате JSON, если вы этого хотите.

...