4
votes

I want to retrieve all the documents other than design documents but _all_docs returns all the documents in the DB. From the answers, I have found that using two queries would give the results.

  1. _all_docs?endkey="_" - lists documents upto the first design doc
  2. _all_docs?startkey="design_\uffff" - lists documents after the design docs

This does not work if the document following the design docs, has _id "``test". It gives the documents having _id beginning with small letters. The ASCII of _ is 95, and that of back-tick is 96. Small letters begin with 97. So can the above query be modified to: _all_docs?startkey="`"

1

1 Answers

3
votes

You are quite correct that the _all_docs endpoint does return design documents. As the _ character sits between numbers + uppercase letters and the lowercase letters, the design documents appear just before documents starting with a lower case letter (or a back tick in your example).

This leaves you with two choices:

1) Make two calls to _all_docs: GET /mydb/_all_docs?endkey="_" & GET /mydb/_all_docs?startkey=""` to get the documents "either side" of the design documents 2) or, Create a new MapReduce view. As MapReduce views do not index design documents, this allows you to get a list of all your documents (excluding design docs) in a single query.

The map function could be as simple as

function(doc) {
  emit(doc._id, null);
}

The query the view with GET /mydb/_design/report/_view/myalldocs