У меня есть база данных couchdb, заполненная документами с метками времени, поэтому формат данного документа выглядит примерно так:
{ id: "uniqueid",
year: 2011,
month: 3,
day: 31,
foo: "whatever"
bar: "something else"
}
Я хотел бы построить набор представлений таким образом, чтобы данный ключвозвращает массив значений года, месяца или дня, для которых существуют документы.Например, учитывая имя представления Days
, я хотел бы, чтобы следующий URL-адрес представления
/db/_design/designdoc/_view/Days?key=[2011,3]
возвратил массив всех дней марта 2011 года, для которых существуют документы.Например, если в марте 2011 года количество документов сократилось на шесть дней, оно могло бы выглядеть следующим образом:
[1, 2, 5, 15, 27, 31]
Аналогично,
/db/_design/designdoc/_view/Months?key=2011
Если в 2011 году количество документов приходилось наАпрель, май и сентябрь могут выглядеть следующим образом:
[4, 5, 9]
И
/db/_design/designdoc/_view/Years
вернет массив лет во всей базе данных.Если документы имеют этот год и последний год, это может выглядеть следующим образом:
[2010, 2011]
Я понимаю, что трудно написать функцию сокращения, которая возвращает массив, потому что вы в конечном итоге столкнулись с ошибками уменьшения переполнения при подсчете документовувеличивается.Я знаю это, потому что я написал функцию сокращения, которая работала, но затем начала выдавать ошибки уменьшения переполнения после того, как я загрузил ее с документами.
Одно из решений, которое я рассмотрел, - это просто создание представления без сокращения, которое создает ключ массива[year, month, day]
, а затем с помощью параметров startkey
и endkey
в представлении для возврата документов.Проблема этого подхода в том, как он масштабируется.Скажем, в моей базе данных тысячи документов за два года.Используя это представление, мне нужно пройтись по всему набору документов, просто чтобы обнаружить это.
Я считаю, этот вопрос пытается задать то же самое, хотя я не совсем уверен, поэтому яЯ решил добавить новый вопрос.Кроме того, ответы на этот вопрос не позволяют избежать ошибок переполнения для больших наборов документов, насколько я могу судить по моим ограниченным навыкам письма.