Hey folks,
(New to the list, and to Couchbase Lite, about which I am very enthusiastic!)
I am having trouble getting desired results from an "all docs" query when using some of the features described in the 1.0.3 "Query Enhancements" documentation [1]. Specifically, prefixMatchLevel does not seem to work as described.
I wish to retrieve all documents with conflicts whose document ID begins with a particular prefix (specifically of the form "business.NNN." where NNN is a number). I instantiate and configure the query like so:
CBLQuery *query = [database createAllDocumentsQuery];
query.allDocsMode = kCBLOnlyConflicts;
The documentation suggests that I should be able to get the relevant rows by doing this:
query.startKey = query.endKey = [NSString stringWithFormat:@"business.%@.", business.server_psk];
query.inclusiveStart = query.inclusiveEnd = YES;
query.prefixMatchLevel = 1;
However, this returns no results. (It is not clear whether inclusiveStart and inclusiveEnd should or should not be YES in this case, but it seems to make no difference.) I only get a result if I specify a startKey and endKey that exactly match an existing document ID.
Does prefixMatchLevel not work for "all docs" queries? I did not see such a caveat mentioned anywhere.
Instead, I have found it necessary to use this approach (stuffing a letter "Z" onto the end of the number so as to stop up the alphabetic sort):
query.startKey = [NSString stringWithFormat:@"business.%@.", business.server_psk];
query.endKey = [NSString stringWithFormat:@"business.%@Z.", business.server_psk];
query.inclusiveStart = YES;
query.inclusiveEnd = NO;
Needless to say, the "Z" technique is kludgy at best. Surely I am overlooking something. Is there a better approach to achieve my query?
I'm using CBL 1.0.4 from CocoaPods/github.
thanks,
b
[1]
https://github.com/couchbase/couchbase-lite-ios/wiki/Query-Enhancements