Each element within the returned array is sorted using native UTF-8 sorting according to the contents of the key portion of the emitted content. The basic order of output is as follows:
null
false
true
Numbers
Text (case sensitive, lowercase first)
Arrays (according to the values of each element, in order)
Objects (according to the values of keys, in key order)
You can reverse the order of the returned view information by
using the descending
query value set to true.
For example, Retrieving the list of recipes using the
by_title
(limited to 5 records) view:
{ "offset" : 0, "rows" : [ { "id" : "3-tiersalmonspinachandavocadoterrine", "key" : "3-tier salmon, spinach and avocado terrine", "value" : [ null, "3-tier salmon, spinach and avocado terrine" ] }, { "id" : "Aberffrawcake", "key" : "Aberffraw cake", "value" : [ null, "Aberffraw cake" ] }, { "id" : "Adukiandorangecasserole-microwave", "key" : "Aduki and orange casserole - microwave", "value" : [ null, "Aduki and orange casserole - microwave" ] }, { "id" : "Aioli-garlicmayonnaise", "key" : "Aioli - garlic mayonnaise", "value" : [ null, "Aioli - garlic mayonnaise" ] }, { "id" : "Alabamapeanutchicken", "key" : "Alabama peanut chicken", "value" : [ null, "Alabama peanut chicken" ] } ], "total_rows" : 2667 }
Requesting the same in descending order will reverse the entire view content. For example the request
GET http://couchdb:5984/recipes/_design/recipes/_view/by_title?limit=5&descending=true Accept: application/json Content-Type: application/json
Returns the last 5 records from the view:
{ "offset" : 0, "rows" : [ { "id" : "Zucchiniinagrodolcesweet-sourcourgettes", "key" : "Zucchini in agrodolce (sweet-sour courgettes)", "value" : [ null, "Zucchini in agrodolce (sweet-sour courgettes)" ] }, { "id" : "Zingylemontart", "key" : "Zingy lemon tart", "value" : [ null, "Zingy lemon tart" ] }, { "id" : "Zestyseafoodavocado", "key" : "Zesty seafood avocado", "value" : [ null, "Zesty seafood avocado" ] }, { "id" : "Zabaglione", "key" : "Zabaglione", "value" : [ null, "Zabaglione" ] }, { "id" : "Yogurtraita", "key" : "Yogurt raita", "value" : [ null, "Yogurt raita" ] } ], "total_rows" : 2667 }
The sorting direction is applied before the filtering applied
using the startkey
and
endkey
query arguments. For example the
following query:
GET http://couchdb:5984/recipes/_design/recipes/_view/by_ingredient?startkey=%22carrots%22&endkey=%22egg%22 Accept: application/json Content-Type: application/json
Will operate correctly when listing all the matching entries
between “carrots” and egg
. If
the order of output is reversed with the
descending
query argument, the view request
will return no entries:
GET http://couchdb:5984/recipes/_design/recipes/_view/by_ingredient?descending=true&startkey=%22carrots%22&endkey=%22egg%22 Accept: application/json Content-Type: application/json
The returned result is empty:
{ "total_rows" : 26453, "rows" : [], "offset" : 21882 }
The results will be empty because the entries in the view are
reversed before the key filter is applied, and therefore the
endkey
of “egg” will be seen
before the startkey
of
“carrots”, resulting in an empty list.
Instead, you should reverse the values supplied to the
startkey
and endkey
parameters to match the descending sorting applied to the keys.
Changing the previous example to:
GET http://couchdb:5984/recipes/_design/recipes/_view/by_ingredient?descending=true&startkey=%22egg%22&endkey=%22carrots%22 Accept: application/json Content-Type: application/json