От http://wiki.apache.org/couchdb/Introduction_to_CouchDB_viewsПотребность Объяснение CouchDB уменьшить функцию
CouchDB снижают функцию определяется как
function (key, values, rereduce) { return sum(values); }
- ключа будет массив, элементы которого являются массивы вида [ключ , id]
- значения будут представлять собой массив значений , испускаемых соответственно ective элементы в ключей
- т.е. уменьшить ([[key1, id1], [ключ2, ID2], [ключ3, id3]], [значение1, значение2, значение3], ложно)
Я имею проблема в понимании, когда/почему массив ключей будет содержать разные значения ключа. Если в массиве ключей содержатся разные значения ключа, как бы я справился с этим?
В качестве примера предположим, что моя база данных содержит перемещения между учетными записями формы.
{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}
Я хочу вид, что дает баланс счета.
Моя функция карта делает:
emit(doc.CreditAccount, doc.amount) emit(doc.DebitAccount, -doc.amount)
Моя функция уменьшения делает:
возврата суммы (значения);
Я, кажется, получаю ожидаемые результаты, однако я не могу смириться с этим тем, что моя функция уменьшения получает разные значения ключа.
Предполагается, что моя функция сокращения должна сначала группировать ключевые значения? Какой результат я бы вернул в этом случае?
Можете ли вы полагаться на получение всех значений в ключевом параметре с тем же значением ключа в этом случае? – Alan
Вы * будете * получать все значения в результате вашего HTTP-запроса. Другими словами, ваш баланс будет правильным. Однако вы ** не можете ** полагаться на все значения, передаваемые вашей функции 'reduce()' за один снимок. Это один из основных компромиссов CouchDB. – JasonSmith
Другими словами, функция, которую вы указали, будет работать, потому что ** при условии, что group = true ** она всегда будет накапливаться для одной учетной записи. Когда начнется другая учетная запись, значение вернется к 0 для вас. – JasonSmith