couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From 7zark7 <>
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", 
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: 

     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)


View raw message