Из http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
couchdb уменьшают функцию, определяется как
function (key, values, rereduce) { return sum(values); }
Я испытываю затруднения при понимании, когда/почему массив ключей содержал бы различные значения ключа. Если бы массив ключей действительно содержит различные значения ключа, как я имел бы дело с ним?
Как пример, предположите, что моя база данных содержит перемещения между учетными записями формы.
{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}
Я хочу представление, которое дает остаток счета.
Моя функция карты делает:
emit( doc.CreditAccount, doc.amount ) emit( doc.DebitAccount, -doc.amount )
Мой уменьшать функцию делает:
возвратите сумму (значения);
Я, кажется, получаю ожидаемые результаты, однако я не могу согласовать это с возможностью, что мой уменьшать функцию получает различные значения ключа.
Мой уменьшать функцию, которая, как предполагают, сгруппировала значения ключа сначала? Какой результат я возвратил бы в этом случае?
По умолчанию Futon "группирует" ваши результаты, что означает, что вы получаете новое сокращение для каждого ключа - в вашем случае - аккаунта. Групповая функция предназначена именно для этой ситуации.
По необработанному HTTP API вы получите одно общее сокращение для всех учетных записей, что, вероятно, бесполезно. Поэтому не забудьте использовать group = true в своем собственном приложении, чтобы быть уверенным, что вы получаете сводки для каждой учетной записи.