просмотр запроса couchdb на основе нескольких полей

#view #mapreduce #couchdb

#Вид #mapreduce создать #couchdb

Вопрос:

Я новичок в couchdb и придерживаюсь одного сценария. У меня есть следующие данные.

 {
_id:"1",
firstName: "John",
lastName: "John"
}
 

Я пишу представление для возврата документов, где FirstName =»John» или LastName =»John» и имеют следующую карту. Итак, запрос будет /view/byName?key=»John»

 function(doc){emit(doc.firstName, doc);emit(doc.lastName, doc);}
 

Я могу отфильтровать дубликаты в reduce, однако я ищу способ отфильтровать документы в map.

Ответ №1:

Если под фильтром вы подразумеваете получение всех уникальных значений, то reduce — правильный способ сделать это. Couchdb the definitive guide также предлагает это. Просто создайте фиктивное сокращение

function(key,values){return true;}

и вызовите свой view с ?group=true помощью, и вы получите все уникальные результаты.

Ответ №2:

Если я вас правильно понимаю, вы хотите иметь оба документа в случае «John Smith» и «John Black», но «John John» следует сообщать один раз.

Couch предоставляет вам уникальный набор ключей по отношению к ключам («John» в вашем примере). Просто введите пару name и document id ( [doc.firstName, doc._id] и [doc.lastName, doc._id] ), и reduce сделает то, что вы хотите.

 ["John", "ID_OF_SMITH"] != ["John", "ID_OF_BLACK"]
["John", "ID_OF_JOHNJOHN"] == ["John", "ID_OF_JOHNJOHN"]