Hi Nicolas, your view code is not the best way to go. The recommendation around here would be to drop the reduce function and query the map part of the view using your doc.name. For big datasets you'll want to add key=docname to the GET request. For smaller views or cases where you're interested in the entire output of the view you could just slurp the whole thing down and pick out the slice of the rows that you want client-side.

If you really want one row per key in your results you can use a reduce function, but Sven alluded to the need to account for rereduce. Your reduce function can operate on a list of values from the map, or on a list of intermediate reductions. In the latter case you'd need to concatenate the arrays that you output in the earlier reductions. For more details see the section on reduce in

http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

Reduce functions work best if their output grows logarithmically with the size of the input data. Yours is linear. If you store a lot of data in that DB you'll find that the view takes up a ton of space and response time will start to lag. Hope that helps,

Adam

On Mar 28, 2009, at 7:25 AM, Nicolas Clairon wrote:

I use this form of reduce to group by key the results.
In the real life, I use this reduce to get all tag group by document id.

Something like that :

function(doc){
  if(doc.doc_type == "MyDoc"){
    for( var t in doc.tags){
      emit(doc.name, doc.tags[t]);
    }
  }
}

and the reduce :

function(key, values){
 return values;
}

I get the following result:

name1 = > ["tag1", "tag2", "tag3"]
name2 => ["tag2", "tag3"]

but sometime I get this result

name1 = [["tag1","tag2","tag3"],["tag4","tag5","tag6","tag7"], ["tag8","tag9"]]

Note that if the view work well the first time, it will always work fine.

It is the correct way to go ?

On Sat, Mar 28, 2009 at 12:10 PM, Sven Helmberger
<[email protected]> wrote:
Nicolas Clairon schrieb:

Nop !

Here is the test  map function :

function(doc){
 emit("key", 1);
}

and the reduce function:

function(key, values){
 return values;
}

That work well for a large usecase but sometime, I get this strange
behavior...


What purpose does the reduce function have? it doesn't really reduce or
combine anything so it seems like it could just as well be left out.

Regards,
Sven Helmberger


Reply via email to