Как сгруппировать записи по годам и месяцам с помощью CouchDB?

Функция просмотра ниже используется для создания некоторых записей:

function(doc) {emit(null,{"date":doc.date,"title":doc.title,"txt":doc.txt});}

{"total_rows":7,"offset":0,"rows":[
{"id":"67ebe3755be4edf5c4edf0d96f0023eb","key":null,"value":{"date":"Dec 12,2012","title":"test1","txt":"this is just a test"}},
{"id":"67ebe3755be4edf5c4edf0d96f003120","key":null,"value":{"date":"Nov 11,2012","title":"test2","txt":"this is just a test2"}},
{"id":"67ebe3755be4edf5c4edf0d96f003869","key":null,"value":{"date":"Dec 22,2012","title":"test4","txt":"this is just a test4"}},
{"id":"67ebe3755be4edf5c4edf0d96f003cfd","key":null,"value":{"date":"Aug 21,2010","title":"test5","txt":"this is just a test5"}},
{"id":"67ebe3755be4edf5c4edf0d96f004466","key":null,"value":{"date":"Nov 1, 2010","title":"test6","txt":"this is just a test6"}},
{"id":"67ebe3755be4edf5c4edf0d96f004d9c","key":null,"value":{"date":"Aug 15,2010","title":"test7","txt":"this is just a test7"}},
{"id":"67ebe3755be4edf5c4edf0d96f005d04","key":null,"value":{"date":"Feb 28,2012","title":"test3","txt":"this is just a test3"}}
]}

Как лучше всего сгруппировать записи по годам и месяцам с помощью функций CouchDB?

(для форматирования вывода в JSON, например:)

{
"2012":{
    "Feb":[{"date":"Feb 28,2012","title":"test3","txt":"this is just a test3"}],
    "Nov":[{"date":"Nov 11,2012","title":"test2","txt":"this is just a test2"}],
    "Dec":[{"date":"Dec 12,2012","title":"test1","txt":"this is just a test"},
        {"date":"Dec 22,2012","title":"test4","txt":"this is just a test4"}]    

    },

"2010":{
    "Aug":[{"date":"Aug 15,2010","title":"test7","txt":"this is just a test7"},
           {"date":"Aug 21,2010","title":"test5","txt":"this is just a test5"}],
    "Nov":[{"date":"Nov 1, 2010","title":"test6","txt":"this is just a test6"}] 

    }

}

person user1276919    schedule 01.12.2012    source источник


Ответы (1)


Ваша функция карты должна выглядеть так:

function (doc) {
    var date = new Date(doc.date);
    emit([date.getFullYear(), date.getMonth()], doc);
}

Затем, когда вы запрашиваете данные представления, они будут отсортированы по дате. если вы добавите «по убыванию = true», они будут отсортированы в обратном порядке. А если вы добавите "?startKey=[2012,""]&endkey=[2012]&descending=true", то вы получите все документы с 2012 doc.date

person Dmitrii Sorin    schedule 01.12.2012
comment
Спасибо за вашу помощь - работает безупречно - я только изменил параметр запроса на нижний регистр: startKey --> startkey. - person user1276919; 02.12.2012
comment
не забудьте принять правильный ответ для следующих людей, которые будут искать тот же вопрос;) - person Dmitrii Sorin; 02.12.2012