Ключи диапазона в представлениях CouchDB - PullRequest
8 голосов
/ 20 июня 2010

Я использую CouchDB для хранения данных о событиях.Каждое событие имеет дату / время начала и дату / время окончания.Я хотел бы создать представление, которое позволит мне получить список всех событий, которые происходят в определенную дату / время.Но у событий нет единой даты, они могут варьироваться в течение нескольких дней.

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

Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 30 июня 2010

Хорошо, вот решение в любом случае! Я просто пинг-понг с Яном (Lehnardt) из CouchDB, и он сказал мне, что я могу emit() несколько раз на карте. Что-то, чего я не знал до сих пор.

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

Я также предполагаю, что событие начинается с полной минуты (например, 16:51:00), а не с 16:51:23. То же самое в день окончания.

Пример документа:

{
    "_id"   : "super-random-id",
    "name"  : "event 1",
    "start" : "TIMESTAMP",
    "end"   : "TIMESTAMP"
}

Вот карта:

function (doc) {
    if (doc.start == undefined || doc.end == undefined) {
        return;
    }
    var current = doc.start;
    while (current <= doc.end) {
        emit(current, doc.id);
        current = current + 60; // increment by 1 minute
    }
}

Тогда будет легко сделать запрос с startkey и endkey. Вы могли бы, вероятно, добавить сюда _list.

4 голосов
/ 16 августа 2010

Наконец-то я нашел хорошее решение с помощью GeoCouch: http://www.diretto.org/2010/08/efficient-time-based-range-queries-in-couchdb-using-geocouch/

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