CouchDB, возвращающий None для клавиши строки (функция уменьшения)

У меня есть функция карты и функция уменьшения, чтобы подсчитать все вхождения ключа. Код ниже для проектного документа CouchDB 2.0:

Функция карты

function(doc) { emit(doc.domainID, 1); }

Уменьшить функцию

_sum

Вот снимок того, что показывает браузер:

Отобразить и уменьшить результат функции

И вот результат, когда я запускаю следующий код в Python:

import couchdb
couch = couchdb.Server("http://localhost:5984/")    
counts = couch['event_db'].view('doc/eventbydomainid',
                                 reduce=True, descending=True)

Терминальный результат при печати ключа и значения

Терминальный результат без ключа

Я ожидаю следующий результат, но не вижу его:

{"ad1": 32, "ad2": 1}

Любая помощь будет оценена.

Спасибо,

Брайан

1 ответ

Решение

Когда вы используете функцию сокращения, по умолчанию поведение сводит весь набор данных к одному значению. Если вы хотите группировать, добавьте group=true по вашему запросу. ( документация)

И хотя вы не спрашивали об этом конкретно, вы, несомненно, столкнетесь с этим при работе с map/ lower в CouchDB. Если вы используете сложные ключи (например, массивы), вы можете использовать group_level параметр для группировки по различным частям массива слева направо. ( пример)

Интересным примером использования здесь является выдача даты в виде массива, например: [2017, 8, 29, 22, 59, 16], С помощью group_level=1 сгруппировать по годам, group_level=2 сгруппировать по годам + месяцам и так далее. (профессиональный совет: используя group_level установит group=true неявно)

Другие вопросы по тегам