С одним запросом из CouchDB можно получить оба.В обоих запросах используется запрос сопоставления / уменьшения, хотя вам не нужна функция сокращения.
В строках представления должно быть [$type, $topic, $timestamp]
пар для ключей:
["article" , "money", "2011-09-21T20:50:29.819Z"]
["article" , "shoes", "2011-09-21T20:30:29.819Z"]
["article" , "shoes", "2011-09-21T20:50:29.819Z"]
["question", "grits", "2011-01-13T20:30:18.123Z"]
["question", "money", "2011-09-20T20:30:18.123Z"]
Эта функция можетсделайте это:
function(doc) {
// _design/my_app/_view/topic_parts
var key;
if(doc.type && doc.parent_topic && doc.created_at) {
// Looks good, emit it into the view.
key = [doc.type, doc.parent_topic, doc.created_at];
emit(key, doc);
}
}
Чтобы найти последние N строк (будь то статьи или вопросы), вам, в основном, нужны строки, соответствующие [$type, $topic, *]
в порядке убывания.Например, для последних N статей по теме X это выглядит следующим образом.(Обратите внимание, что null
является наименьшим значением в CouchDB, а объект {}
является самым большим.)
descending=true
, чтобы получить обратный хронологический порядок.(Обратите внимание, что «нисходящий» концептуально означает, что кушетка сканирует «снизу» до «верха» строк. * startkey и endkey меняются местами .) startkey=["articles","X",{}]
, поэтомуэто статьи о X начиная с конца времени endkey=["articles","X",null]
, это те же самые статьи о X заканчивая началом времени limit=N
, чтобы урезать результаты до
Таким образом, запрос будет выглядеть следующим образом (не забывайте кодировать URL при необходимости).
GET /db/_design/my_app/_view/topic_parts?descending=true&startkey=["articles","X",{}]&endkey=["articles","X",null]&limit=N