Хорошо, вот решение в любом случае! Я просто пинг-понг с Яном (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
.