Лонгполл CouchDB без _changes

Я хочу использовать опцию longpoll в CouchDB, но без представления _changes. База данных имеет такое представление:

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

Таким образом, он выдает все документы, в которых есть тег «работа». Обратите внимание, что у меня есть куча других вещей в этой БД. Теперь я хочу использовать длинный опрос, при котором соединение остается открытым, пока в БД нет документов с тегом задания. Как только есть документ с тегом задания, БД отправляет его клиенту, и соединение должно быть закрыто. Теперь клиент может выполнить задание, отправить команду удаления в базу данных, чтобы удалить задание, и снова начать прослушивание. Итак, моя идея состоит в том, чтобы вызвать представление как-то так:

http://mycouch/mydb/_design/visualize/_view/get_jobs?feed=longpoll&include_docs=true

Однако кажется, что использовать longpoll можно только с представлением _changes. Любое обходное решение?

Спасибо за любую помощь


person Seff2    schedule 04.12.2018    source источник


Ответы (1)


_changes — это фид, который вам нужно использовать в вашем случае. Вы можете использовать его для фильтрации канала, получая изменения только для документов с тегом «работа». Вы можете сделать это, используя функцию просмотра карты.

http://mycouch/_changes?filter=_view&view=visualize/get_jobs&feed=logpoll&include_docs=true

Через этот канал вы будете получать любые обновления (создание/обновление/удаление) по документам с тегом «работа» в вашей базе данных.

person Juanjo Rodriguez    schedule 05.12.2018