Hi,
If I understood correctly your problem, I think you will find your
answer here:
http://guide.couchdb.org/editions/1/en/views.html
Cheers,
CGS
On 10/12/2011 04:56 PM, Go Hori wrote:
Hello,
I am resending this hoping someone has some insight...
Please let me know if I can clarify my question in any way.
Thank you in advance,
Go
---------- Forwarded message ----------
From: Go Hori<[email protected]>
Date: Tue, Oct 11, 2011 at 8:45 AM
Subject: Emulating S3 path convention
To: [email protected]
Hi,
I see a few references to implementing S3 like naming convention in
which an id contains a delimiter and an application can emulate
directory lookup using 'prefix' and 'delimiter' search parameters.
Has anyone done something like this with couch?
http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?ListingKeysHierarchy.html
I have implemented a view with a map function that breaks down a path
and using startkey/endkey, I can get a list of ALL documents for a
given prefix. That was pretty straight forward, but now I am stuck
trying to figure out how to support 'delimiter' part. To start, I am
planning on a fix delimiter '/'. So, please let me illustrate:
Let's assume we have five documents with following ids:
/beer/japan/asahi
/beer/japan/kirin
/beer/usa/oregon/rouge/deadguyale
/beer/usa/washingon/pikeplace/ipa
/sake/usa/california/gekkeikan
/beer (without a trailing slash)
/sake (without a trailing slash)
My mapper emits (key : value)
for the first doc
----------------------
'/' : 'beer/'
'/beer/' : 'japan/'
'/beer/japan/' : 'asahi'
for the second doc
---------------------------
'/' : 'beer/'
'/beer/' : 'japan/'
'/beer/japan' : 'kirin'
for the last doc
----------------------
'/' : 'sake'
So, If I do startkey="/beer/"&endkey="/beer/", I get
{"id":"/beer/japan/asahi","key":"/beer/","value":"japan/"},
{"id":"/beer/japan/kirin","key":"/beer/","value":"japan/"},
{"id":"/beer/usa/oregon/rouge/deadguyale","key":"/beer/","value":"usa/"},
{"id":"/beer/usa/washington/pikeplace/ipa","key":"/beer/","value":"usa/"}
This makes sense. I am getting all documents that contains a key "/beer/".
Now, with prefix& delimiter search, I'd like to return a list of
direct descendant of a path being searched without duplicates.
So, I want to return something like
"/beer/" => ["japan/", "usa/"].
Then, I can iterate through this list and traverse down a tree.
It feels like I should be able to reduce a map result down so that
it'll do what I want, but I am very much stuck..I tried to reduce map
results down to a list of unique values, but I cannot figure out how
to restrict the search so that it does what I want.
Any help will be greatly appreciated.
Thanks,
Go