Возможно, ваши требования к запросу не совсем точно, поскольку вы не указали. Однако если вам нужно найти какие-либо документы, которые начинаются или заканчиваются в определенном диапазоне, вы можете применить большую часть того, что написано ниже. Если это не совсем то, что вы ищете, я могу быть более полезным с немного большим направлением. :)
Если вы используете CouchDB, вы можете создавать свои индексы, разбивая части вашей даты на массив. ([year, month, day, hour, minute, second, ...]
)
Ваша функция карты, вероятно, будет выглядеть следующим образом:
function (doc) {
var date = new Date(doc.PeriodStart);
emit([ date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() ] , null]);
}
Чтобы выполнить любой запрос диапазона, вам нужно преобразовать время начала и окончания в одну и ту же структуру массива. Оттуда ваш запрос на просмотр будет иметь параметры с именами startkey
и endkey
. Они будут получать параметры массива для начала и конца соответственно.
Итак, чтобы найти документы, которые были запущены за последние 24 часа, вы должны отправить строку запроса, подобную этой, в дополнение к полному URI для самого представления:
// start: Apr 17, 2011 12:30pm ("24 hours ago")
// end: Apr 18, 2011 12:30pm ("today")
startkey=[2011,04,17,12,30]&endkey=[2011,04,18,12,30]
Или, если вы хотите все с этого текущего года:
startkey=[2011]&endkey=[2011,{}]
Обратите внимание на {}
. При использовании в качестве конечного ключа: [2011,{}]
идентично [2012]
, когда представление сопоставляется. (любой формат будет работать)
Дополнительные компоненты массива будут просто игнорироваться, но чем больше специфичности вы добавите в свои массивы, тем более конкретным может быть ваш диапазон. Добавление функций сокращения может быть очень мощным, если вы добавите параметр group_level
, но это выходит за рамки вашего вопроса.