#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"]