2015-06-09 9 views
1

У меня есть мнение, которое выглядит следующим образом:CouchDB View не переиндексировать

function(doc) { 
    if (doc.type === 'article' && (Date.parse(doc.published) < (Date.now() - 30 * 60 * 1000))) { 
     emit(doc._id, doc._rev); 
    } 
} 

Представление в основном излучает статьи, которые являются устаревшими (т.е. {{опубликована дата}} < {{настоящее время - 30 минут} }.

Теперь проблема заключается в следующем: представление не обновляется после первого чтения. Первый доступ создает представление для всех документов, как ожидалось. Но после этого кажется, что он только обновляет себя при изменении (delete , создавать или обновлять новые документы).

Это howev проблема, а не то, что я желаю. У меня есть другие статьи, которые становятся устаревшими с развитием времени поэтому я бы хотел, чтобы кушетка возвращала эти статьи, но поскольку они не изменены, они не появляются в представлении.

Это то, что я только что описал, похоже, ожидается, что поведение couchdb (?). Но есть ли способ показать устаревшие искусства?

PS: Простой способ проверить это, чтобы вставить документ с опубликованными = Date.now() и type = "article" и запустить это представление. Через 30 минут вы увидите, что документ действительно устарел в соответствии с определением вида, но он не будет отображаться в представлении. 30 минут - это всего лишь номер. Если хотите, вы можете уменьшить его до меньшего временного интервала. Заранее спасибо за вашу помощь !

+0

Я могу подтвердить, что это ожидаемое поведение просмотров couchdb. Представления будут пересчитываться только при изменении (для новых документов). Идея: попробуйте «doc.published» часть вашего ключа, например 'emit ([Date.parse (doc.published), doc._id], doc._rev);' поэтому вы можете создать запрос, выбирая все старше х секунд. – h4cc

+0

@JuliusBeckmann Спасибо за ваше предложение. Вы имеете в виду, что я проверяю, не устарели ли статьи в логике приложения (используя ключ запуска/завершения), а не в самом представлении? ... – 82Tuskers

+0

Подумайте о представлении в виде сгенерированного индекса. Этот индекс не будет изменяться сам по себе, но вы можете изменить запрос, чтобы получить трафик этого индекса. Поэтому да, используйте запрос, используя start/end на этом представлении, чтобы получить нужные вам данные. – h4cc

ответ

0

Да, это по дизайну. Индекс просмотра обновляется только в разделе «Создать обновление и удаление частей CRUD».

Фильтрация чего-то динамического во время чтения осуществляется с помощью ключа.

В вашем случае вы, вероятно, хотите, чтобы испустить следующим образом:

emit(doc.published, doc); 

Тогда при вызове CouchDB вы бы добавить параметры, которые будут дополнительно отфильтровать опубликованной даты.

Смежные вопросы