couchdb, отключение rereduce - PullRequest
       6

couchdb, отключение rereduce

0 голосов
/ 18 марта 2012

Я пытаюсь вытащить пару ключ-значение из дивана БД.Ключ - это идентификатор игрока, а значение - сколько игр существует, где их очередь.У меня есть метод карты, который успешно получает список playerID, gameID, где playerID - это чья очередь для gameID.Моя функция сокращения - это простой вызов длины.

function(keys, values){
  return values.length;
}

Когда я запускаю это из Futon, он работает нормально.Я получаю пример вывода: 5,11 6,3

Однако, когда я вызываю его из Divan (C # lib для couchdb), я получаю нулевой результат, 14

Я думаю, этообъединяя их в один элемент путем редукции.Есть ли способ отключить восстановление?

Спасибо.

-Ник

1 Ответ

2 голосов
/ 19 марта 2012

Нет, вы не можете отключить восстановление. Однако разница здесь в том, что Futon добавляет group = true при вызове вашего представления, а Divan - нет, что объясняет разные результаты.

Вам следует заменить функцию приведения на «_count», которая правильно обрабатывает случаи как редуцирования, так и редуцирования. Ваша функция возвращает длину массива значений, которая является правильной только для случая сокращения. Правильное решение в javascript будет выглядеть так:

function(keys, values, rereduce) {
  if (rereduce) {
    return sum(values);
  } else {
    return values.length
  }
}

В вызове Reduce массив значений содержит все, что вы выдавали в качестве значения, по одной записи для каждого выброса. Поскольку вы рассчитываете, вам все равно, что это за ценность, только сколько их было. В вызове re-Reduce массив значений содержит значения, ранее выданные вызовом Reduce. Здесь длина массива значений совершенно не имеет значения, вместо этого вы хотите получить сумму длин предыдущих фаз сокращения.

...