Передача аргумента в map.js в представлении CouchApp - PullRequest
1 голос
/ 21 июля 2011

У меня есть CouchApp, который работает как социальная сеть.У меня есть кнопка «Мне нравится», которая, когда пользователь нажимает на нее, создает и сохраняет JSON-документ CouchDB с полями post_id (идентификатор понравившегося сообщения), user_id (идентификатор понравившегося сообщения) и типом(значение равно «как», чтобы указать, что документ похож на).

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

function(doc) {
  if (doc.type && doc.type == 'like') {
    emit(doc.post_id, 1);
  }
}

и мое уменьшение, это:

function(post_ids, likes) {
  return sum(likes);
}

Моя проблема в том, что эта функция возвращает сумму ВСЕХ лайков во ВСЕХ сообщениях на сайте,Я думаю, что мой redu.js в порядке, и, возможно, я мог бы настроить свой map.js для принятия аргумента post_id, чтобы я мог извлечь только лайки из этого post_id, но как мне это сделать?Post_id происходит из проектного документа, конечно, когда нажимается кнопка «Мне нравится».

Спасибо.

1 Ответ

1 голос
/ 21 июля 2011

Вам необходимо просмотреть параметр просмотра group.Если вы не укажете параметры строки запроса, по умолчанию будет уменьшено все содержимое представления.После того как вы примените group=true, вы также можете использовать key или startkey/endkey для выбора нужного идентификатора поста.

Также есть встроенные функции уменьшения которые могут выполнять основные операции сокращения намного более эффективно.(поскольку они представляют собой скомпилированный код erlang, а не исходный код javascript) Просто поставьте _count вместо всего вашего reduce.js.(Вы можете даже опустить 1 в вашем emit)

...