Как рассчитывать уникальные вхождения ключа в представлении - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующие значения ключей, выбрасываемые в функции просмотра карты CouchDB.

{"key":101,"value":"ABC"}
{"key":101,"value":"ABC"}
{"key":101,"value":"ABC"}
{"key":101,"value":"XYZ"}
{"key":101,"value":"XYZ"}
{"key":101,"value":"XYZ"}
{"key":102,"value":"XYZ"}
{"key":102,"value":"XYZ"}

Мне нужен вывод в виде уникального значения для каждой клавиши.

{"key":101,"value":2}
{"key":102,"value":1}

Как я могу использовать для этого функцию уменьшения?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете попробовать изменить свою функцию на что-то вроде ниже и использовать _sum функцию уменьшения

Предполагая, что val содержит ABC, XYZ и num содержит 101, 102

function (doc) {
  if (doc.value) {
    emit([doc.num, doc.val], 1);  
  }
}
0 голосов
/ 07 февраля 2019

Если число уникальных значений на ключ конечно и если мы можем хранить их в Установите .

Внутри редуктора выполните следующие действия:

foreach value for a given key 
iterate each value and add to a set 
emit key, set.size()

Пример


Key 101 - Value [ABC, ABC, ABC, XYZ, XYZ, XYZ]
101, create a set s with elements [ABC, XYZ]
emit 101,2 where 2 is s.size()

Key 102 - Value [XYZ, XYZ]
102, create a set s with elements  [XYZ]
emit 102, 1 where 1 is s.size()

Карта для отображения значения ключа как есть.Использование комбинера также рекомендуется.

...