You need to escape the url (& is evaluated by the shell):

curl 
'http://127.0.0.1:5984/test/_design/test/_view/test-byTown?startkey=%5B%22foo%20ca%22%5D&endkey=%5B%22foo%20ca%22,%7B%7D%5D'

Greetings
Johannes

2014-02-13 17:24 GMT+01:00 Tito Ciuro <[email protected]>:
> Hello again,
>
> I'm confused about one behavior I see with curl. If I enter the following URL:
>
> http://127.0.0.1:5984/test/_design/test/_view/test-byTown?startkey=%5B%22foo%20ca%22%5D&endkey=%5B%22foo%20ca%22,%7B%7D%5D
>
> the browser I get the following:
>
> {"total_rows":2,"offset":0,"rows":[
> {"id":"9b857ca67a2611d51595aa3ad0306f30","key":["foo 
> ca","9b857ca67a2611d51595aa3ad0306f30"],"value":null}
> ]}
>
> This works as expected. However, if I issue the same command with curl I get 
> more than I expected:
>
> curl 
> http://127.0.0.1:5984/test/_design/test/_view/test-byTown?startkey=%5B%22foo%20ca%22%5D&endkey=%5B%22foo%20ca%22,%7B%7D%5D
>
> TurboMonkey:_design tito$ {"total_rows":2,"offset":0,"rows":[
> {"id":"9b857ca67a2611d51595aa3ad0306f30","key":["foo 
> ca","9b857ca67a2611d51595aa3ad0306f30"],"value":null},
> {"id":"9b857ca67a2611d51595aa3ad030733c","key":["foo 
> fl","9b857ca67a2611d51595aa3ad030733c"],"value":null}
> ]}
>
> Why do I get different outputs? (and why is curl not doing the right thing?)
>
> Thanks again,
>
> -- Tito
>
> On Feb 12, 2014, at 8:38 PM, Tito Ciuro <[email protected]> wrote:
>
>> Hi Kevin,
>>
>> Yes, you're right. I'm still getting my head around Map/Reduce and I'm 
>> learning how to better lay out the data constantly.
>>
>> Thanks for the pointers. Much appreciated!
>>
>> -- Tito
>>
>> On Feb 12, 2014, at 6:26 PM, Kevin Coombes <[email protected]> wrote:
>>
>>> Maybe you should completely describe the structure you want.
>>>
>>> {
>>> "_id": "12345",
>>> "location": {
>>>      "state": "California",
>>>       "city": "Florence"
>>> }
>>> }
>>>
>>> Because (1) you can define multiple views that emit any reasonable 
>>> combination of city and state in any order you might want to query and (2) 
>>> some day you might want to add an entry like
>>>
>>> {
>>> "_id": "98765",
>>> "location": {
>>>      "country": "Italy",
>>>      "province": "Tuscany",
>>>       "city": "Florence"
>>> }
>>> }
>>>
>>> On 2/12/2014 6:10 PM, Tito Ciuro wrote:
>>>> Hello,
>>>>
>>>> Ah! I see. Well, what if I stored the path in an array instead?:
>>>>
>>>> {
>>>>  "_id" : "12345",
>>>>  "location" : [<some_city>,<some town>]
>>>> }
>>>>
>>>> If I emit (doc.location,doc._id), would I be able to write a query that 
>>>> matches the second element of the doc.location array?
>>>>
>>>> Thanks again for all the help,
>>>>
>>>> -- Tito
>>>>
>>>> On Feb 12, 2014, at 2:48 PM, Jason Winshell <[email protected]> wrote:
>>>>
>>>>> AFAIK, you're describing a CouchDB limitation. You may need to use 
>>>>> CouchDB-Lucene to get your answers. CouchDB views match keys in an index. 
>>>>> You can match a prefix, but not a tail. And you can't deal with case 
>>>>> sensitivity. You might be able to generate a view in which you reverse 
>>>>> the chars of your location and then match in reverse order (i.e. turning 
>>>>> the problem into a prefix). I think trying to coerce Couch to do that is 
>>>>> nutty. Just use CouchDB-Lucene.
>>>>>
>>>>> On Feb 12, 2014, at 2:35 PM, Tito Ciuro <[email protected]> wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I have a database with documents with the following format:
>>>>>>
>>>>>> {
>>>>>>  "_id" : "12345",
>>>>>>  "location" : <some_city>.<some town>
>>>>>> }
>>>>>>
>>>>>> I have values like:
>>>>>>
>>>>>> California.San Francisco
>>>>>> California.Los Angeles
>>>>>> Florida.Miami
>>>>>> ...
>>>>>> ...
>>>>>>
>>>>>> What I'm trying to do is to match documents that "end with" a particular 
>>>>>> string. Say I want to match all states where the town 'Anytown' exists:
>>>>>>
>>>>>> California.Anytown
>>>>>> Florida.Anytown
>>>>>> Texas.Anytown
>>>>>>
>>>>>> If I use the following query:
>>>>>>
>>>>>> curl 
>>>>>> http://127.0.0.1:5984/example/_design/test/_view/ends-with-city?key=%22California.Anytown%22
>>>>>>
>>>>>> It works and returns one document (as expected), but I cannot seem to 
>>>>>> make it work when I look for an "end with" string. I have seen examples 
>>>>>> where %007F is used to match "begins with". When I use it, I get a 
>>>>>> {"error":"bad_request","reason":"invalid_json"} message. So I'm not sure 
>>>>>> how to proceed.
>>>>>>
>>>>>> Any ideas? Thanks!
>>>>>>
>>>>>> -- Tito
>>>
>>
>

Reply via email to