incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From 7zark7 <7za...@gmail.com>
Subject Map/reduce returning an array?
Date Fri, 11 Jun 2010 00:37:13 GMT
Hi, having some trouble with map/reduce returning an array of values, 
and was wondering if you might be able to help:

Documents in my DB have an optional "parent" value, which indicates the 
parent document's id.

For example, some simplified documents and ids:

{ "_id": "a" },
{
     "_id": "b",
     "parent": "a"
},
{
     "_id": "c",
     "parent": "a"
},
{ "_id": "d" },
{
     "_id": "e",
     "parent": "d"
}


Given a doc id, I am trying to retrieve a list of its "child" document 
ids, which point to the specified doc as their parent.

For example, with the docs above, querying for "a" should return ["b", 
"c"].
Querying for "d" should return ["e"]


The map function I tried was:

function(doc) {
	if (doc.parent) {
		emit (doc.parent, doc._id);
	}
}


Which works fine; here is example output for: 
/db/_design/temp/_view/related?key="a"

{
     total_rows: 12,
     offset: 3,
     rows: [
         {
             id: "b",
             key: "a",
             value: "b"
         },
         {
             id: "c",
             key: "a",
             value: "c"
         }
     ]
}


However, I'm unsure what to use for a reduce function.
This was my last attempt, which seemed to work correctly for a while:

function(keys, values) {
	var related = [];
	for (var i = 0; i < values.length; ++i) {
		if (related.indexOf (values[i]) == -1) {
			related.push (values[i]);
		}
	}
	return related;
}


However, after adding a few dozen documents, it stopped functioning with 
this error:

"Reduce output must shrink more rapidly: "


If there some way to correct my reduce or map function?  Or is there 
another approach I could use?  (Barring changing the document structure 
if possible)


Thanks


Mime
View raw message