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 13:10:21 GMT
Thank you Rogutės, this answers the question and it works.

Now I think the wiki should be updated.
I cannot find any mention of the "keys" parameter.

It's OK for everyone if I update the wiki with this information?

thanks,
  Marcello

2012/1/18 Rogutės Sparnuotos <rogutes@googlemail.com>:
> This parameter works fine with integer keys in Firefox:
>  ?keys=[4739, 4823]
> But you would really have to encode it to this:
>  ?keys=%5B4739%2C+4823%5D
> All using GET.
>
> Marcello Nuccio (2012-01-18 12:56):
>> 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/
>> >>> >>
>> >>>
>> >>
>> >>
>
> --
> --  Rogutės Sparnuotos

Mime
View raw message