incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcello Nuccio <marcello.nuc...@gmail.com>
Subject Re: get view with a list of keys
Date Wed, 18 Jan 2012 11:56:38 GMT
CGS, I think we are talking of different things.

The original question was: is it possible to make a view request with
a list of keys?

My response was: yes, but you need to use POST, as documented at
http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options

Your response was: you can use a GET, simply use as many `key[]=key`
query parameters as needed to send the list of keys.

Then I've asked how do you do that, since:
1. it does not work for me.
2. it's not documented.

Your sample code does a different thing and does not respond to the
original question: is it possible to make a view request with a list
of keys?

Your sample code uses an array as start/end keys, but this is not the
same as asking for a list of keys.

Marcello

2012/1/18 CGS <cgsmcmlxxv@gmail.com>:
> ...and, yes, it is cache-able because if I repeat the request (with the
> exact same parameters), the browser reports "304 Not Modified".
>
> CGS
>
>
>
> On Wed, Jan 18, 2012 at 12:34 PM, CGS <cgsmcmlxxv@gmail.com> wrote:
>
>>
>> Here is an example (I used list function, but it works with pure map
>> function nevertheless):
>>
>> 1. jQuery plugin:
>>
>> $.test = $.test || {};
>> $.extend($.test, {
>>         fetch_data_startendkey: function(options) {
>>             options = options || {};
>>             $.ajax({
>>                 type     : "GET",
>>                 url      : "
>> http://my_domain.domain_type:5984/mydatabase/_design/design_name/_list/list_function_name/view_function_name?startkey=
>> "+options.startkey+"&endkey="+options.endkey+"&limit="+options.limit+"&skip="+options.skip+"&descending="+options.descending,
>>                 dataType : "json",
>>                 async    : false,
>>                 global   : false,
>>                 data     : {},
>>                 error    : options.error,
>>                 success  : options.success
>>             });
>>         }
>> });
>>
>> 2. jQuery callback:
>>
>> $.test.fetch_data_startendkey({
>>             startkey: "my_string",
>>             endkey: "my_other_string",
>>             limit: mylimit,
>>             skip: myoffset,
>>             descending: my_descending_boolean,
>>             success : function(data, textStatus, headers) {
>>                 /* do something with the predefined errors and the
>> returned data if no predefined error returned */
>>             },
>>             error : function(code, error, reason) {
>>                 /* do something with the error */
>>             }
>>         });
>>
>> where "my_*string" is the list transformed in string (e.g.,
>> "[\""+key1+"\",\""+key2+...+"\"]", whatever method used to get that
>> string), mylimit and myoffset are integers and so on. No manual encoding
>> needed (handled by the browser).
>>
>> 3. The request in log shows no difference from the direct request from the
>> address bar.
>>
>> This works for me without any problem for my CouchDB 1.1.0. I know the
>> method can be improved to be more robust, but I have no time now for that.
>> Nevertheless, GET method works and it doesn't require manual encoding.
>>
>> CGS
>>
>> PS: I hope I don't have typos and neither I omitted something as I am
>> quite tired now. If I did, please, let me know.
>>
>>
>>
>>
>>
>> On Wed, Jan 18, 2012 at 12:01 PM, Marcello Nuccio <
>> marcello.nuccio@gmail.com> wrote:
>>
>>> I'm not sure to follow...
>>>
>>> 1. are you sure the GET does work? When I try, the key[] parameters are
>>> ignored.
>>>
>>> 2. IMHO the advantage of GET is cache-ability. Building a JSON is quite
>>> easy:
>>>    JSON.stringify({ keys: [ "key1", "key2" ] });
>>>
>>> Can you give some more information?
>>>
>>> Thanks,
>>>  Marcello
>>>
>>> 2012/1/18 CGS <cgsmcmlxxv@gmail.com>:
>>> > The problem with POST method is that you need to do the encoding
>>> manually,
>>> > while with GET method instead of &key=["key1",...], you get
>>> > &key[]=["key1"]&key[]=... To solve the problem, for example, I transform
>>> > the full query in a string and I attach it manually to the web address.
>>> In
>>> > that way, the browser takes care of encoding for me and I avoid the
>>> mess. I
>>> > use this method under jQuery AJAX (don't forget to add \" for the double
>>> > quota required in the query).
>>> >
>>> > Hope it will help.
>>> >
>>> > CGS
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > On Wed, Jan 18, 2012 at 11:29 AM, Marcello Nuccio <
>>> marcello.nuccio@gmail.com
>>> >> wrote:
>>> >
>>> >> Yes, but you need to do a POST, not a GET:
>>> >>
>>> >> http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
>>> >>
>>> >> put the following JSON in the body:
>>> >> {"keys": ["key1", "key2", ...]}
>>> >>
>>> >> Marcello
>>> >>
>>> >> 2012/1/18 Alexandre Masselot <alexandre.masselot@gmail.com>:
>>> >> > Hello,
>>> >> >
>>> >> > I'm using view with a simple map that extract a couple of values
(we
>>> >> store
>>> >> > millions of web page info in couchdb and I need to access rapidly
a
>>> md5
>>> >> > field to know whether we should treat a crawled page or if we already
>>> >> know
>>> >> > it).
>>> >> >
>>> >> > It's fine to get the view output for one page
>>> >> > http://127.0.0.1:5984/honbot/_design/projections/_view/md5?key=
>>> >> > "http%253A%252F%252Fwww.gesunde-maenner.ch%252Fhtml%252F"
>>> >> >
>>> >> >
>>> >> > For saving, we use bulk_docs to save doc per 1000 slices and that
>>> goes
>>> >> much
>>> >> > faster.
>>> >> >
>>> >> > My question is: is it possible to make a view request list above,
but
>>> >> with
>>> >> > a list of key?
>>> >> > Let's say
>>> >> > "http%253A%252F%252Fwww.gesunde-maenner.ch%252Fhtml%252F"
>>> >> >  and "http%253A%252F%252Fwww.pipo.com"
>>> >> >
>>> >> >
>>> >> > thanks for the help
>>> >> > alex
>>> >> > --
>>> >> > Alexandre Masselot
>>> >> >
>>> >> > http://alexandre-masselot.blogspot.com/
>>> >>
>>>
>>
>>

Mime
View raw message