When you query a view, you can provide parameters that indicate the order of results; there are also parameters you use to indicate a start and end for a result set as we described earlier. When you provide these types of query parameters, this is how Couchbase functions:
Begin collecting results from the top of the index, or at the start position specified.
Provide one row from the index at a time, until the end of the index, or until the specified end key.
For instance imagine the simplest case where Couchbase Server generates this index based on a view:
Key Value 0 "foo" 1 "bar" 2 "baz"
We use the Ruby SDK to retrieve all the results in descending order:
doc.foo_bar(:descending => :true )
We query the view named
foo_bar and indicate we
want the results to be in descending order by providing the
:descending parameter set to true. In this case
our result set would appear as follows:
Key Value 2 "baz" 1 "bar" 0 "foo"
Imagine we want to provide another query parameter along with the
:descending, such as a start key. In this case
our query would look like this in Ruby:
doc.foo_bar(:descending => :true, :start_key => 1)
Here our result set would look like this:
Key Value 1 "bar" 0 "foo"
This might not be what you expected: when you indicated the start
key, you probably expected the last two items in the index sorted
in descending order. But when you specify the order
:descending to be true, Couchbase Server will
read index items from the bottom of the index upwards. Therefore
you get the items in position 1 then 0 from the index. To get the
results in position 1 and 2, you would invert the logic of your
query and use the
:endkey parameter set to 1:
doc.foo_bar(:descending => :true, :end_key => 1)
In this case Couchbase Server will start reading items at the last position of 2, and then add the item from position 1. Your result set will appear as follows:
Key Value 2 "baz" 1 "bar"
Couchbase Server sorts results in ascending or descending order based on the value of the key; for instance if you sort in ascending order, keys starting with 'a' will be in a higher position than those starting with 'c'. For more information about sorting rules and values in Couchbase Server, see Couchbase Server 2.0 Manual, Ordering