Можно ли указать параметры запроса CouchDB в списке на основе текущей даты?

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

{ type: "event", start: "2012-02-08T19:30+01:00", title: "foo" }

Существует представление, которое перечисляет эти документы, используя start в качестве ключа. Это потому, что эти даты сортируются естественным образом:

function (doc) {
  if (doc.type == "event") emit(doc.start, doc)
}

Затем я могу получить доступ к следующим трем событиям с помощью параметра запроса startkey: viewname?startkey=\"2012-02-08\"&limit=3

Теперь я использую список для форматирования этого представления с помощью HTML:

function (doc, req) {
  return provides("html", function() {
    // something with getRow() to query the view
  });
}

Текущая дата является динамической и не может быть указана непосредственно в функции карты представления, но есть ли способ установить свойство startkey в функции списка? Прежде чем позвонить getRow() в первый раз? Конечно, я мог бы разобрать ключ и сравнить его с текущей датой в списке, но это полностью аннулирует намерения параметров запроса. Есть ли способ лучше?


Предыстория

URL-адрес списка на самом деле переписан из гораздо более красивого URL-адреса. У меня есть следующие свойства в rewrites.json:

{
    "from": "/ausstellungen/rueckblick",
    "to": "_list/rueckblick/exhibitions",
    "query": {
      "startkey": "\"2012-02-08\"",
    "descending": true
  }
}

Дата является статической, но параметр всегда должен отражать текущую дату.


person Stephan Klein    schedule 08.02.2012    source источник
comment
Я не думаю, что это возможно. Что бы я сделал, так это: иметь запланированный процесс, который помечает старые события как... старые и выдает в представлении только будущие события.   -  person Marcello Nuccio    schedule 09.02.2012
comment
Не могу поймать. Почему вы не можете указать текущую дату для представления или списка?   -  person sinm    schedule 19.03.2012
comment
Я предполагаю, что он не использует какой-либо третий слой, такой как PHP, поэтому для перезаписи URL требуется фактическая дата ... для правильной работы.   -  person okurow    schedule 08.05.2012
comment
извините, я мог обновить свой комментарий только первые 5 минут ... так что еще раз: я думаю, он не использует какой-либо 3-й слой, такой как PHP, поэтому для перезаписи URL требуется фактическая дата ... для правильной работы. в этом случае вам придется переписать design_doc с обработчиком url_rewrite и заменить startkey. Это должно быть сделано с помощью cronjob... или где-то в JavaScript-коде сайта. Еще одна идея, которую вы можете найти: функция обновления, которая обновляет этот дизайн_документ каждый день и использует внутреннюю функцию даты?   -  person okurow    schedule 08.05.2012


Ответы (1)


Нет, единственный способ сделать это без простого отбрасывания строк в вашей функции _list на основе чтения new Date (что в любом случае вызовет проблемы с кэшированием) будет внешним по отношению к базе данных: либо интеллектуальный обратный прокси-сервер, либо убедиться, что ссылки на представление имеют правильный стартовый ключ. Переписывание CouchDB не поддерживает вмешательство JavaScript, и что-либо выше этого уровня вы не сможете изменить, какие данные извлекаются с диска.

person natevw    schedule 09.11.2012