On Sat, Jun 06, 2009 at 09:52:18AM +0200, Benoit Chesneau wrote:
> This morning I hit reduce limit while trying to recreate a tree from
> documents containing a "parent" member. I tried first to create an
> index of documents and add to value a children member :
>
> function(keys, values, rereduce) {
>
> var idx_comments = {};
> if(!rereduce) {
... snip
> } else {
> return values;
> }
I'm not sure exactly what you're trying to achieve here, but it can't be
right like that. Unless you're working on a tiny dataset of a handful of
documents, reducing is a multi-step process. You must be able to reduce down
in a tree, combining a set of previously-reduced values.
And in any case: as far as I can see, your code under if(!rereduce) doesn't
return anything!
Can you explain what you want to get out from the reduce value?
Maybe you're trying to build a tree of
{
"id1": {parent:"parent_id", children:["id","id","id"],
"id2": {parent:"parent_id", children:["id","id","id"],
...
}
If so, that's not a "good" reduce function. It will be extremely inefficient
when you have a large dataset, because the intermediate and final reduce
values will be very large.
You would be much better off building the tree in the client. Given a
suitable view which just emits parent_id, the data transferred to the client
will be small (smaller than the reduce view, in fact)
Regards,
Brian.