[ 
https://issues.apache.org/jira/browse/COUCHDB-834?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul Joseph Davis resolved COUCHDB-834.
---------------------------------------

    Resolution: Not A Problem

> startkey_docid/endkey_docid don't work without an exact startkey/endkey match
> -----------------------------------------------------------------------------
>
>                 Key: COUCHDB-834
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-834
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 1.0
>            Reporter: Mathias Meyer
>
> This issue popped up when I wanted to paginate through a list of documents 
> using a combined array key, using a startkey and endkey that's based solely 
> on the first part of said key. First part is a reference to a different 
> document, second part is a timestamp to keep the list sorted by creation 
> time. The list of documents can be fetched using startkey=["key"] and 
> endkey=["key", {}]
> Now, I wanted to add pagination to this list, only fetching so many documents 
> starting at startkey_docid, which failed using this setup. It seems (and Jan 
> validated that assumption by analyzing the source) that both startkey needs 
> to be an exact match for startkey_docid to have any effect. If there's no 
> exact match, CouchDB will silently ignore the startkey_docid, a behaviour 
> that's undocumented and to be quite frank, unintuitive.
> Consider the following two documents, both pointing to the same other_id:
> {"_id": "one", "other_id": "other", "second_key": "one"}
> {"_id": "two", "other_id": "other", "second_key": "two"}
> And a simple map/reduce function that just emits the combined key:
> {
>    "other_documents": {
>        "reduce": "_sum",
>        "map": "          function(doc) { \n emit([doc.other_id, 
> doc.second_key], 1);\n  }\n"
>    }
> }
> Querying the view like this gives the expected results:
> curl 
> 'http://localhost:5984/startkey_bug/_design/other_documents/_view/other_documents?reduce=false&startkey=\["other"\]&endkey=\["other",\{\}\]'
> {"total_rows":2,"offset":0,"rows":[
> {"id":"one","key":["other","one"],"value":1},
> {"id":"two","key":["other","two"],"value":1}
> ]}
> If I add in a startkey_docid of two, I'd expect CouchDB to skip to the second 
> result in the list, skipping the first, but it doesn't:
> curl 
> 'http://localhost:5984/startkey_bug/_design/other_documents/_view/other_documents?reduce=false&startkey=\["other"\]&endkey=\["other",\{\}\]&startkey_docid=two'
> {"total_rows":2,"offset":0,"rows":[
> {"id":"one","key":["other","one"],"value":1},
> {"id":"two","key":["other","two"],"value":1}
> ]}
> However, it does what I'd expect when I specify an exact startkey (the endkey 
> is still the same):
> curl 
> 'http://localhost:5984/startkey_bug/_design/other_documents/_view/other_documents?reduce=false&startkey=\["other","one"\]&endkey=\["other",\{\}\]&startkey_docid=two'
> {"total_rows":2,"offset":1,"rows":[
> {"id":"two","key":["other","two"],"value":1}
> ]}
> If you add in an exact endkey, the situation doesn't change, and the result 
> is as expected.
> Having an exact startkey is an acceptable workaround, but I'd still say this 
> behaviour is not intuitive, and either should be fixed to work the same in 
> all of the above situations. If not, at least the documentation should 
> properly reflect these situation, explaining the proper workarounds.
> Update: I just checked how this works out when using descending=true, the 
> same is true for the swapped endkey and startkey parameters. Specifying and 
> endkey_docid requires to specify an exact endkey match.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to