CouchDB Посмотреть эквивалент SUM & GROUP BY - PullRequest
6 голосов
/ 01 апреля 2011

У меня есть несколько документов CouchDB, представляющих метку времени со свойством userId и тегом (пользователь может иметь n меток времени и назначать каждому тег).Я хочу запросить CouchDB по определенному идентификатору пользователя и получить отсортированный список тегов, которые использовал пользователь (отсортированный по вхождению).

Как будет выглядеть представление?

Если я хочу получитьсписок всех тегов, отсортированных по вхождению (независимо от того, от какого пользователя) или если я предполагаю, что есть только документы с одинаковым userId, я бы сделал это так:

Карта:

function(doc) {
  if(doc.tag) emit(doc.tag, 1); 
}

Уменьшение:

function(keys, values) {
  return sum(values);
}

Но как мне сгруппировать результат, чтобы я мог отфильтровать запрос по определенному идентификатору пользователя?

1 Ответ

8 голосов
/ 01 апреля 2011

Отвечая на мой вопрос.

Похоже, CouchDB поддерживает массивы в качестве ключей. Имея это в виду, все довольно просто:

Карта:

function(doc) {
  if(doc.tag) emit([doc.userId, doc.tag], 1); 
}

Сокращение:

function(keys, values) {
  return sum(values);
}

Затем результат сортируется по идентификатору пользователя и тегу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...