couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kevin Coombes <kevin.r.coom...@gmail.com>
Subject Re: Matching docs which values ending with a specific string
Date Thu, 13 Feb 2014 02:26:59 GMT
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 <jasonw@bearriver.com> 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 <tciuro@mac.com> 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


Mime
View raw message