incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rogutės Sparnuotos <rogu...@googlemail.com>
Subject Re: get view with a list of keys
Date Wed, 18 Jan 2012 12:45:08 GMT
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