Нужно Объяснение couchdb уменьшить функцию - PullRequest
9 голосов
/ 03 мая 2010

С http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

Функция преобразования couchdb определяется как

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

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

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

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

Я хочу получить представление, отображающее остаток на счете.

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

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

Моя функция уменьшения:

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

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

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

1 Ответ

3 голосов
/ 04 мая 2010

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

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

...