Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > NoSQL > CouchDB уникальные элемент


Автор: Chort409 6.3.2012, 23:52
Добрый день.

Возникла следующая проблемма при работе с CouchDB.
В результате работы view получаю дублирующие записи типа:
Код

{"total_rows":511,"offset":381,"rows":[
{"id":"CDOC_2.16.840.1.113883.3.59.3:0947___QCPR___80717","key":"7012979","value":{"one":"one","two":"two"}},
{"id":"CDOC_2.16.840.1.113883.3.59.3:0947___QCPR___80921","key":"7012979","value":{"one":"one","two":"two"}}
]}

Есть ли возможность получить одно единственное значение по заданному параметру ?
Пробовал сделать это через reduse, но особых результатов не получил.
Можно конечно фильтровать уже на сервере, но хотелось бы сделать это на стороне CouchDB.

Автор: Chort409 14.3.2012, 21:11
Если кому будет интересно, то проблемма решина.
Немножко кривым способом но встаки.

Нужно переписать view с использование сложного ключа, который будет содержать все параметры которые нужны от этого view.
Выглядит примерно вот так:

Код

function(doc) {
var complexKey = [doc.document.one, doc.document.two,...];
emit(complexKey, {doc.document.one, doc.document.two,...});
}


Так же надо добавить очень простою reduse функцию

Код

_count

И как бы все. Запрос к CouchDB теперь выглядит так:
?group=true&startkey=["7012979"]&endkey=["7012979",{}]

Ответ от бд будет выглядить следующим образом:
Код

{"rows":[
{"key":["one","two"],"value":2}
]}

Собственно то, что и хотели получить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)