Если вам нужно выполнить запрос только по одному key
, вы можете использовать следующую карту:
function (doc) {
if (doc.blogId) {
emit([doc.key, doc.anotherkey], 1);
}
}
и запрос для "KEY"
с ?startkey=["KEY"]&endkey=["KEY",{}]&include_docs=true
.
Здесь, согласно спецификации сортировки CouchDB :
["KEY"]
- это значение, которое меньше любого значения ["KEY","OTHER"]
(поскольку более длинные массивы сортируются после их префиксов), но больше, чем любое значение ["KEY2","OTHER"]
с "KEY2" < "KEY"
;
- и
["KEY",{}]
- это значение, превышающее любое значение ["KEY","OTHER"]
, , если doc.otherkey
никогда не является объектом JSON (поскольку объекты JSON идут после любого другого значения JSON), но меньше, чем любое ["KEY2","OTHER"]
с "KEY2" > "KEY"
.
Конечно, это не ограничивается строками. Любой тип значения будет работать, если сопоставление правильное.
Не забудьте URL кодировать значения в startkey
и endkey
. Например, используя curl
и предполагая, что вашей базой данных является «DB»:
curl 'http://localhost:5984/DB/_design/test/_view/all?startkey=%5B%22KEY%22%5D&endkey=%5B%22KEY%22,%7B%7D%5D&include_docs=true'
Обратите внимание, что я использовал параметр запроса include_docs
вместо того, чтобы выдавать весь документ с emit(..., doc)
, чтобы сэкономить место на диске. Параметры запроса задокументированы в Документация CouchDB .
Чтобы отсортировать результаты в порядке убывания, используйте параметр запроса descending=true
и поменяйте местами значения startkey
и endkey
как , документированные в полном справочнике .
curl 'http://localhost:5984/DB/_design/test/_view/all?endkey=%5B%22KEY%22%5D&startkey=%5B%22KEY%22,%7B%7D%5D&include_docs=true&descending=true'