Объяснение потребности couchdb уменьшает функцию

Из http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

couchdb уменьшают функцию, определяется как

function (key, values, rereduce) {
    return sum(values);
}
  • ключ будет массивом, элементы которого являются массивами формы [ключ, идентификатор]
  • значения будут массивом значений, испускаемых для соответствующих элементов в ключах
  • т.е. уменьшите ([[key1, id1], [key2, id2], [key3, id3]], [value1, value2, value3], ложь)

Я испытываю затруднения при понимании, когда/почему массив ключей содержал бы различные значения ключа. Если бы массив ключей действительно содержит различные значения ключа, как я имел бы дело с ним?

Как пример, предположите, что моя база данных содержит перемещения между учетными записями формы.

{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}

Я хочу представление, которое дает остаток счета.

Моя функция карты делает:

emit( doc.CreditAccount, doc.amount )
emit( doc.DebitAccount, -doc.amount )

Мой уменьшать функцию делает:

возвратите сумму (значения);

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

Мой уменьшать функцию, которая, как предполагают, сгруппировала значения ключа сначала? Какой результат я возвратил бы в этом случае?

9
задан JasonSmith 4 May 2010 в 09:22
поделиться

1 ответ

По умолчанию Futon "группирует" ваши результаты, что означает, что вы получаете новое сокращение для каждого ключа - в вашем случае - аккаунта. Групповая функция предназначена именно для этой ситуации.

По необработанному HTTP API вы получите одно общее сокращение для всех учетных записей, что, вероятно, бесполезно. Поэтому не забудьте использовать group = true в своем собственном приложении, чтобы быть уверенным, что вы получаете сводки для каждой учетной записи.

3
ответ дан 5 December 2019 в 01:42
поделиться